Andere ungeöffnete Datei mit VBA ansprechen
Schritt-für-Schritt-Anleitung
Um mit VBA Inhalte aus einer anderen, ungeöffneten Excel-Datei zu lesen, folge diesen Schritten:
-
Öffne den VBA-Editor:
- Drücke
ALT + F11
in Excel, um den VBA-Editor zu öffnen.
-
Füge ein neues Modul hinzu:
- Klicke mit der rechten Maustaste auf
VBAProject (DeineDatei)
, gehe zu Einfügen
und wähle Modul
.
-
Kopiere den folgenden Code:
Sub DatenEinlesen()
Dim Dateiname As Variant, i As Integer
Dim pos As String, menge As Integer
Dim a As Integer
Dim such As Integer
Dim zeile As Integer
Dim FirstBook As Object
Dim SecondBook As Object
' Geöffnete Datei als FirstBook
Set FirstBook = ActiveWorkbook
' Alles im Zielbereich löschen
Range("AN2:XFD1413") = ""
' Erstes file im Ordner auswählen
Dateiname = Dir$("C:\Users\Name\Desktop\Neuer Ordner\*file*" & ".xlsx")
' Schleife solange es Files im Ordner gibt
Do While Dateiname <> ""
' Dateiname in die oberste Zeile schreiben
Range("AN9").Offset(0, i) = Dateiname
' Öffnet die Datei "Dateiname"
Workbooks.Open ("C:\Users\Name\Desktop\Neuer Ordner\" + Dateiname)
' Definieren des Files als SecondBook
Set SecondBook = ActiveWorkbook
' Bereich in dem die Positionen Stehen auslesen
For a = 36 To 55
pos = SecondBook.Worksheets("Sheet1").Cells(a, 2)
menge = SecondBook.Worksheets("Sheet1").Cells(a, 23)
If Not pos = "" Then
' Aktivieren der Hauptdatei
FirstBook.Activate
' Gleiche Position in der Hauptdatei suchen
For such = 10 To 1413
If Cells(such, 3).Value = pos Then
' Zeile Auslesen und in eine Variable schreiben
zeile = Cells(such, 3).Row
' Menge in die richtige Zeile schreiben
Range("AN9").Offset(zeile - 9, i) = menge
End If
Next such
End If
Next a
' Spalte in der, der Dateiname steht um eins erhöhen
i = i + 1
SecondBook.Close False
' Nächste Datei auswählen
Dateiname = Dir$()
Loop
End Sub
-
Führe das Makro aus:
- Drücke
F5
oder gehe zu Run
und wähle Run Sub/UserForm
.
Häufige Fehler und Lösungen
-
Fehler: "Index außerhalb des gültigen Bereichs"
Dieser Fehler tritt auf, wenn die Datei nicht geöffnet ist. Stelle sicher, dass Du die Datei mit Workbooks.Open
öffnest, bevor Du auf deren Inhalte zugreifst.
-
Fehler: "Dateiname nicht gefunden"
Überprüfe den Pfad und die Dateinamen. Achte darauf, dass das Muster in Dir$
korrekt ist.
-
Benachrichtigung zum Aktualisieren der Daten
Um die Rückfrage beim Öffnen der Dateien zu umgehen, kannst Du den Parameter UpdateLinks:=False
beim Workbooks.Open
Befehl hinzufügen.
Alternative Methoden
Falls Du keine VBA verwenden möchtest, kannst Du auch Formeln einsetzen, um Daten aus anderen Arbeitsmappen zu referenzieren. Zum Beispiel:
='C:\Users\Name\Desktop\Neuer Ordner\[Dateiname.xlsx]Sheet1'!A1
Denke daran, dass diese Methode nur funktioniert, wenn die Datei geöffnet ist.
Praktische Beispiele
Hier sind einige praktische Anwendungsszenarien:
-
Zelleninhalte zusammenfassen: Du kannst die oben genannte VBA-Prozedur nutzen, um alle Zelleninhalte mehrerer Dateien in einer Hauptdatei zusammenzuführen.
-
Datenanalyse: Mit VBA kannst Du große Datenmengen analysieren, ohne alle Dateien manuell zu öffnen und zu überprüfen.
Tipps für Profis
-
Nutze Option Explicit
zu Beginn Deines VBA-Codes, um sicherzustellen, dass alle Variablen deklariert sind. Das hilft, Fehler zu vermeiden.
-
Experimentiere mit Workbook_Open
und Workbook_Close
Ereignissen, um die Automatisierung zu verbessern.
-
Verwende Application.ScreenUpdating = False
, um die Bildschirmaktualisierung während der Ausführung Deines Codes zu deaktivieren. Das beschleunigt den Prozess erheblich.
FAQ: Häufige Fragen
1. Kann ich mit VBA auch Daten aus mehreren Dateien gleichzeitig abrufen?
Ja, Du kannst eine Schleife verwenden, um alle Dateien in einem Ordner nacheinander zu öffnen und die Daten zu extrahieren.
2. Wie kann ich verhindern, dass Excel beim Öffnen der Dateien nach Aktualisierungen fragt?
Füge beim Öffnen der Datei den Parameter UpdateLinks:=False
hinzu, um diese Rückfrage zu vermeiden.
3. Welche Excel-Version benötige ich für VBA?
VBA ist in den meisten Excel-Versionen verfügbar, jedoch solltest Du sicherstellen, dass Du mindestens Excel 2003 oder neuer verwendest, um die oben genannten Funktionen zu nutzen.