Excel-VBA: Andere, geöffnete Excel-Datei speichern?

4 Antworten

Dateinamen sind Strings und keine Variablen, deshalb funktioniert das so nicht.

Dateien öffne ich automatisiert in Excel grundsätzlich so, dass ich sie in Variablen vom Typ Workbook setze, etwa so:

  Dim ExcelDateinamenListe As Collection, Dateiname As String, i As Integer
Dim wb As Workbook, wbGeöffnet As Boolean, j As Integer

'... Jede Menge Vorbereitungen ...

'3. diese Excel-Dateien durcharbeiten
For i = 0 To ExcelDateinamenListe.Count - 1
Dateiname = ExcelDateinamenListe.Item(1 + i) 'siehe Bemerkung unten
wbGeöffnet = False
For j = 0 To Application.Workbooks.Count - 1 'Leider kennt VBA 6 noch keine "Collection.Contains()"-Methode
Set wb = Application.Workbooks.Item(1 + j)
If wb.Name = Dateiname Then
wbGeöffnet = True
Exit For
End If
Next

If Not wbGeöffnet Then Set wb = Application.Workbooks.Open(Filename:=Dateiname, updatelinks:=False, ReadOnly:=True, addtomru:=False)

wbExportieren wb, i

If Not wbGeöffnet Then wb.Close savechanges:=False
Next i

Wenn mehrere Dateien gleichzeitig geöffnet sein sollen, nehme ich ein Array oder eine Collection.

(Das "(1 + i)" verwende ich übrigens statt des üblicheren "(i + 1)", um bei späteren Revisionen des Codes daran erinnert zu werden, dass "+ 1" bzw. "1 +" da steht, weil VBA 6 noch in viel zu vielen Fällen bei 1 statt bei 0 anfängt zu zählen. Nach ein paar Jahrzehnten Programmieren in mehreren verschiedenen Sprachen hat man Schwierigkeiten damit, wenn der erste Index 1 statt 0 ist und neigt dazu, so was ggf. zu "korrigieren".)

Vielen Dank für die ausführliche Erläuterung.

Leider verstehe ich sie dennoch nicht ganz :D

Der Code oben bringt mir nicht sehr viel, oder? Ich will die Dateien ja nicht öffnen, sondern unter neuem Namen und in einem neuen Verzeichnis speichern.

 

0
@Dennisthek1nq

Mein wesentlicher Punkt war, dass ich die Dateien schon beim Öffnen in Variablen nehme, um später problemlos darauf zugreifen zu können. Sorry, hab nicht bemerkt, dass das etwas an der Frage vorbei geht.

Also:

DateinameNeu = Cells(8,6).Text + "-" + DateinameAlt
If Dir(PfadNeu + "\" + DateinameNeu) <> "" Then Kill PfadNeu + "\" + DateinameNeu
wb.SaveAs FileName:=PfadNeu + "\" + DateinameNeu
wb.Close SaveChanges:=False 'Excel fragt manchmal überflüssigerweise nach
Kill PfadAlt + "\" + DateinameAlt
1

Was spricht denn dagegen, die andere -schon offene- Datei zu ativieren (ist ein Fenster-Befehl, kein Datei-Befehl) , also

Windows("zu speichernde Datei").activate

...saveAs...

anschließend wieder Windows("gewünschteDatei").activate

Ein VBA-Makro läuft ja weiter, solange die es enthaltende Datei offen ist, egal, welche gerade aktiv ist!

Die Infos zum speichern_unter sollte man allerdings vorher in (Text-)Variablen im Makro festschreiben

Mit Workbooks erlangst du Zugriff auf die geöffneten Arbeitsmappen.

Bei dir sollte es Workbooks("2.xls") sein.

Woher ich das weiß:Beruf – Programmierer

was heisst denn 2.xls.SaveAs? 

Workbooks("2.xls").SaveAs ...

Was möchtest Du wissen?