Dateien mit variablen Dateinamen mit EXCEL VBA öffnen

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