VBA: Warten bis Datei geöffnet ist
Schritt-für-Schritt-Anleitung
Um in Excel VBA zu warten, bis eine Datei geöffnet ist, kannst Du den folgenden Code verwenden. Dieser Code integriert eine Schleife, die prüft, ob die Datei erfolgreich geöffnet wurde, bevor die Fensteranordnung erfolgt:
Sub naechste_KW()
ActiveWorkbook.Sheets(Sheets.Count).Copy _
After:=ActiveWorkbook.Sheets(Sheets.Count)
ActiveWorkbook.Sheets(Sheets.Count).Name = _
"KW" & Sheets.Count + 1
Range(Range("A65536").End(xlUp).Offset(1, 3), "H3").ClearContents
Range("D3").Select
' Hier öffnet er jetzt meine andere Datei
Workbooks.Open FileName:= _
"D:\Dürr\Formulare\Stunden-Berechnung\Stunden-Berechnung_2006.xls"
' Hier wird gewartet, bis die Datei geöffnet ist
geladen = False
Do
For Each wb In Workbooks
If wb.Name = "Stunden-Berechnung_2006.xls" Then geladen = True
Next wb
Loop Until geladen = True
Windows.Arrange ArrangeStyle:=xlHorizontal
End Sub
Häufige Fehler und Lösungen
-
Fensteranordnung funktioniert nicht: Wenn Du das Makro über einen Shortcut aufrufst und die Fensteranordnung nicht funktioniert, könnte es daran liegen, dass die Anordnung nicht richtig ausgeführt wird, bevor das Makro endet. Achte darauf, dass die Bedingungen zum Warten korrekt gesetzt sind.
-
Datei wurde nicht gefunden: Überprüfe den Dateipfad und den Dateinamen. Eine falsche Schreibweise oder ein nicht existierender Pfad kann dazu führen, dass die Datei nicht geöffnet werden kann.
Alternative Methoden
Eine alternative Methode, um sicherzustellen, dass das Makro wartet, bis die Datei geöffnet ist, besteht darin, die Sleep-Funktion zu verwenden. Diese Methode ist jedoch weniger elegant, da sie einfach eine festgelegte Zeit wartet, anstatt aktiv zu prüfen, ob die Datei geöffnet ist.
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub naechste_KW()
' ... (Dein bestehender Code)
Workbooks.Open FileName:= _
"D:\Dürr\Formulare\Stunden-Berechnung\Stunden-Berechnung_2006.xls"
' Warten für 2 Sekunden (2000 Millisekunden)
Sleep 2000
Windows.Arrange ArrangeStyle:=xlHorizontal
End Sub
Diese Methode ist einfacher, bietet jedoch nicht die Flexibilität der ersten Lösung.
Praktische Beispiele
Angenommen, Du hast einen weiteren Dateinamen, den Du prüfen möchtest:
Sub andere_Datei_oeffnen()
Workbooks.Open FileName:= _
"D:\Dürr\Formulare\Andere-Datei.xls"
geladen = False
Do
For Each wb In Workbooks
If wb.Name = "Andere-Datei.xls" Then geladen = True
Next wb
Loop Until geladen = True
Windows.Arrange ArrangeStyle:=xlHorizontal
End Sub
Durch diese Anpassung kannst Du diese Struktur für verschiedene Dateien nutzen.
Tipps für Profis
- Nutze
Option Explicit
am Anfang deiner Module, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.
- Füge Fehlerbehandlung hinzu, um sicherzustellen, dass das Makro nicht abstürzt, wenn etwas Unerwartetes auftritt:
On Error Resume Next
' Dein Code hier
On Error GoTo 0
- Teste Deinen Code immer in einer sicheren Umgebung, bevor Du ihn in wichtigen Arbeitsmappen ausführst.
FAQ: Häufige Fragen
1. Wie kann ich sicherstellen, dass die Datei wirklich geöffnet ist?
Verwende die Schleife, die im Beispielcode integriert ist. So wird aktiv geprüft, ob die Datei in der Liste der geöffneten Arbeitsmappen vorhanden ist.
2. Warum funktioniert die Fensteranordnung nicht bei der Verwendung von Shortcuts?
Das kann passieren, wenn das Makro nicht in der Lage ist, die Fensteranordnung rechtzeitig auszuführen. Stelle sicher, dass das Warten auf die Datei korrekt implementiert ist und teste den Ablauf ohne Shortcut.