Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 11:16:26
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Warten bis andere Datei geschlossen

Forumthread: Warten bis andere Datei geschlossen

Warten bis andere Datei geschlossen
25.02.2015 09:45:41
Werner
Hallo zusammen!
Ich habe hier einen Code aus diesem genialen Forum "geklaut" und etwas angepasst.
Sub Master_Test_offen()
Dim iOpen As Integer
Dim sFile As String
sFile = ThisWorkbook.Worksheets(1).Range("C3").Value
Do While Test_offen(sFile) = 1
Loop
Workbooks.Open sFile
End Sub
Private Function Test_offen(sPath As String) As Integer
If Dir(sPath) = "" Then
TestOpen = 2
Else
On Error GoTo ERRORHANDLER
Open sPath For Random Access Read Lock Read Write As #1
Close #1
End If
ERRORHANDLER:
If Err = 70 Then Test_offen = 1
End Function
Sub Master_schliessen()
Application.CutCopyMode = False
Application.Wait (Now + TimeValue("0:00:01"))
Workbooks("xyz.xlsm").Close True
Application.Wait (Now + TimeValue("0:00:02"))
End Sub Ich möchte eine Datei erst dann durch andere Anwender öffnen lasen, wenn sie tatsächlich geschlossen ist.
Es kann dabei ja vorkommen, dass mehrere Personen fast gleichzeitig die Masterdatei öffnen wollen.
Ich weiß - das Thema ist nicht neu.
Wenn dann Daten in die Master-Datei geschrieben wurden kommt die Aufforderung, die schreibgeschützte Datei unter einem anderen Namen zu speichern.
Wartet der Code oben doch nicht, bis die Haupt-Datei tatsächlich zu ist?
Gruß und Danke schon mal vorab.
Werner

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Warten bis andere Datei geschlossen
26.02.2015 13:12:15
fcs
Hallo Werner,
ich würde die Makros wie folgt aufbauen, so dass nur im Sekundentakt geprüft wird, ob die Datei geöffnet ist und nach 10 Versuchen der Öffnen-Vorgang abgebrochen wird.
Es macht jedenfall keinen Sinn die Prüfung, ob Datei geöffnet schnellstmöglich im Takt von Bruchteilen von Sekunden auszuführen.
Außerdem solltest du alle Werte Prüfen, die dein Testmakro zurückgeben kann. Sonst endet das Ganze schnell in einer Endlosschleife.
Gruß
Franz
Option Explicit
Sub Master_Test_offen()
Dim iOpen As Integer, iCount As Integer
Dim sFile As String
sFile = ThisWorkbook.Worksheets(1).Range("C3").Value
Do
iCount = iCount + 1
iOpen = Test_offen(sFile)
If iOpen  1 Then Exit Do
If iCount = 10 Then Exit Do 'Ausstieg nach 10 Versuchen
Application.Wait (Now + TimeValue("0:00:01")) 'Wartezeit zwischen Versuchen
Loop
Select Case iOpen
Case 2
MsgBox "Datei " & sFile & " wurde nicht gefunden"
Case 0
Workbooks.Open sFile
Case 1
MsgBox "Masterdatei ist nach 10 Sekunden immer noch geschlossen"
End Select
End Sub
Private Function Test_offen(sPath As String) As Integer
Dim TestOpen As Integer
TestOpen = 0
If Dir(sPath) = "" Then
TestOpen = 2
Else
On Error GoTo ERRORHANDLER
Open sPath For Random Access Read Lock Read Write As #1
Close #1
End If
ERRORHANDLER:
If Err = 70 Then TestOpen = 1
Test_offen = TestOpen
End Function
Sub Master_schliessen()
On Error GoTo Fehler
Err.Clear
Application.CutCopyMode = False
'Application.Wait (Now + TimeValue("0:00:01")) 'unnötig/überflüssig
Workbooks("xyz.xlsm").Close True
'Application.Wait (Now + TimeValue("0:00:01")) 'evtl. sinvoll, damit nicht gleich _
wieder das Öffnen-Makro gestartet werden kann.
Fehler:
If Err.Number  0 Then
MsgBox "Masterdatei ""xyz.xlsm"" ist nicht mehr geöffnet!"
End If
End Sub

Anzeige
AW: Warten bis andere Datei geschlossen
27.02.2015 09:38:42
Werner
Hallo Franz!
Der Tipp war gut!!!
Danke!
Einfach ein tolles Forum hier!
Gruß
Werner
;
Anzeige

Infobox / Tutorial

Warten bis andere Datei geschlossen in Excel VBA


Schritt-für-Schritt-Anleitung

Um sicherzustellen, dass eine Excel-Datei erst geöffnet wird, wenn sie von anderen Anwendern geschlossen wurde, kannst Du folgendes VBA-Skript verwenden. Dieses Skript überprüft regelmäßig, ob die Datei geöffnet ist, und wartet gegebenenfalls, bis sie geschlossen wird.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul:
    • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsm)".
    • Wähle "Einfügen" und dann "Modul".
  3. Füge den folgenden Code in das Modul ein:
Option Explicit

Sub Master_Test_offen()
    Dim iOpen As Integer, iCount As Integer
    Dim sFile As String
    sFile = ThisWorkbook.Worksheets(1).Range("C3").Value
    Do
        iCount = iCount + 1
        iOpen = Test_offen(sFile)
        If iOpen <> 1 Then Exit Do
        If iCount = 10 Then Exit Do ' Ausstieg nach 10 Versuchen
        Application.Wait (Now + TimeValue("0:00:01")) ' Wartezeit zwischen Versuchen
    Loop
    Select Case iOpen
        Case 2
            MsgBox "Datei " & sFile & " wurde nicht gefunden"
        Case 0
            Workbooks.Open sFile
        Case 1
            MsgBox "Masterdatei ist nach 10 Sekunden immer noch geschlossen"
    End Select
End Sub

Private Function Test_offen(sPath As String) As Integer
    Dim TestOpen As Integer
    TestOpen = 0
    If Dir(sPath) = "" Then
        TestOpen = 2
    Else
        On Error GoTo ERRORHANDLER
        Open sPath For Random Access Read Lock Read Write As #1
        Close #1
    End If
ERRORHANDLER:
    If Err = 70 Then TestOpen = 1
    Test_offen = TestOpen
End Function

Sub Master_schliessen()
    On Error GoTo Fehler
    Application.CutCopyMode = False
    Workbooks("xyz.xlsm").Close True
Fehler:
    If Err.Number <> 0 Then
        MsgBox "Masterdatei ""xyz.xlsm"" ist nicht mehr geöffnet!"
    End If
End Sub
  1. Stelle sicher, dass der Pfad zur Datei in Zelle C3 korrekt ist.
  2. Schließe den VBA-Editor und teste das Makro.

Häufige Fehler und Lösungen

  • Problem: Die Datei wird trotz des Codes nicht geöffnet.

    • Lösung: Überprüfe, ob der Pfad in Zelle C3 korrekt ist. Teste den Code in einer Umgebung, in der die Datei tatsächlich geschlossen ist.
  • Problem: Endlosschleife beim Öffnen.

    • Lösung: Stelle sicher, dass die Anzahl der Versuche (iCount) und die Wartezeit korrekt gesetzt sind. Prüfe, ob die Datei wirklich geöffnet ist, bevor Du das Makro ausführst.

Alternative Methoden

Wenn Du die Wartezeit zwischen den Versuchen anpassen möchtest, kannst Du die Application.Wait-Zeile ändern, um beispielsweise alle zwei Sekunden zu prüfen:

Application.Wait (Now + TimeValue("0:00:02"))

Eine andere Methode ist die Verwendung von DoEvents, um die Kontrolle an das Betriebssystem zurückzugeben und sicherzustellen, dass Excel weiterhin reagiert.


Praktische Beispiele

Ein praktisches Beispiel könnte das Warten auf eine Datei sein, die von einem Kollegen bearbeitet wird. Stelle sicher, dass Du den Pfad zu der Datei in die Zelle C3 einträgst. Der Code wird dann die Datei öffnen, sobald sie geschlossen wird.


Tipps für Profis

  • Nutze MsgBox für Benutzerbenachrichtigungen, um Feedback zu geben, wenn die Datei nicht gefunden wird oder wenn der Öffnungsversuch fehlschlägt.
  • Füge Logging-Funktionen hinzu, um zu protokollieren, wann und wo Fehler auftreten, um die Fehlersuche zu erleichtern.

FAQ: Häufige Fragen

1. Wie kann ich die Wartezeit zwischen den Prüfungen anpassen?
Du kannst die Application.Wait-Zeile im Code ändern, um die Wartezeit zwischen den Versuchen zu erhöhen oder zu verringern.

2. Was passiert, wenn die Datei nicht gefunden wird?
Der Code gibt eine Fehlermeldung aus, die besagt, dass die Datei nicht gefunden wurde. Stelle sicher, dass der Pfad korrekt ist.

3. Ist dieser Code in allen Excel-Versionen anwendbar?
Der Code sollte in den meisten modernen Excel-Versionen funktionieren, die VBA unterstützen, wie Excel 2010 und neuer.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige