Eine sehr häufig benötigte Routine in Excel VBA ist das Öffnen von Dateien mit variablen Dateinamen und das Importieren von Inhalten anderer Dateien, um diese weiter auszuwerten. In diesem Tipp zeige ich Ihnen eine elegante Lösung.
Eine Möglichkeit ist, den variablen Teil des Dateinamens – in unserem Beispiel also das Datum – in der Excel-Datei in eine Zelle einzutragen. Die Prozedur würde dieses Datum dann auslesen und in den Dateinamen übernehmen. Nehmen wir an, Sie tragen das Datum im (deutschen) Format in Zelle A1 des ersten Arbeitsblattes ein, also zum Beispiel 01.08.2012.
Die Prozedur müsste dann wie folgt aussehen:
Sub Datei()
datum = sheets(1).cells(1,1).value ‚liest das Datum aus Zelle A1 des ersten Arbeitsblatts ein
datum = format(datum, „yyyymmdd“) ‚ formatiert das Datum in einen Text, der dem notwendigen Format entspricht
ChDir "C:Temp"
Workbooks.Open Filename:="C:Temp“ & datum & „_Daten.xlsx" ‚ baut das Datum in den Dateinamen ein
End Sub
[adcode categories=“office,excel“]
Erst Zeilennummer, dann Spaltennummer vergeben
Wichtig ist bei der Verwendung von Cells, dass in der Klammer zuerst die Zeilennummer und danach die Spaltennummer angegeben wird. Das ist etwas gewöhnungsbedürftig, hat aber den Vorteil, dass man mit der Spaltennummer ebenso rechnen kann wie mit der Zeilennummer – im Range-Objekt Range(„A1“), das zum Beispiel der Makrorekorder verwendet, ist ein Rechnen mit den Bezügen nicht so ohne Weiteres möglich.
Abschließend noch eine elegante Möglichkeit, die geöffnete Datei wieder zu schließen, nachdem die Daten ausgelesen worden sind:
Sub Datei()
datum = Sheets(1).Cells(1, 1).Value ‚liest das Datum aus Zelle A1 des ersten Arbeitsblatts ein
datum = Format(datum, "yyyymmdd") ‚ formatiert das Datum in einen Text, der dem notwendigen Format entspricht
ChDir "C:Temp"
Workbooks.Open Filename:="C:Temp" & datum & "_Daten.xlsx" ‚ baut das Datum in den Dateinamen ein und öffnet die Datei
Columns(1).Select ‚markiert Spalte A
Selection.Copy ‚kopiert den Inhalt von Spalte A in die Zwischenablage
Application.DisplayAlerts = False ’schaltet Systemmeldungen aus
ActiveWorkbook.Close (False) ’schließt die aktive Datei ohne Speichern
Application.DisplayAlerts = True ’schaltet Systemmeldungen wieder ein
Cells(1, 1).Select ‚markiert den Zielbereich zum Einfügen
ActiveSheet.Paste ‚fügt den Inhalt der Zwischenablage ein
End Sub