Datei öffnen und prüfen ob sie offen ist

  • Excel

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von mr77.

    Datei öffnen und prüfen ob sie offen ist

    Hallo,

    ich lasse die Datei auf einen Fernseher (großer Monitor) laufen, wo immer wieder die Werte aktualisiert werden. Da sollen natürlich keine Fehlermeldungen oder Abbrüche zusehen sein.
    Deshalb muss sichergestellt werden dass die Macro weiter läuft auch wenn die geladene Datei, aus welchen Gründen auch immer, momentan nicht geöffnet werden kann.
    Nur ist die DO-Loop Schleife nicht wirklich hilfreich, da wenn die Datei nicht geöffnet werden kann, sich die Macro aufhängt.

    Ich brauch eine Möglichkeit eine Datei zu öffnen (Schreibgeschützt), dann soll geprüft werden ob die Datei offen ist.
    Sollte die Datei nicht offen sein, soll eine Zeit X gewartet werden und dann wird wieder versucht die Datei zu öffnen.

    Hier mein bisheriger Ansatz


    Function Tabelle_oeffnen(Tabellenname As String, Pfad As String)
    If Dir(Pfad & Tabellenname) <> "" Then
    On Error Resume Next
    Workbooks.Open Filename:=Pfad & Tabellenname, ReadOnly:=True
    geladen = False
    Do
    For Each WB In Workbooks
    If WB.Name = Tabellenname Then geladen = True
    Next WB
    Loop Until geladen = True
    Else
    MsgBox ("Die Datei existiert nicht")
    End If
    End Function


    Danke
    Gruß
    Michael

    Visual Basic-Quellcode

    1. ​Sub TryOpen()
    2. Do
    3. Set WB = OpenTable("x.xlsx", "c:\Temp\")
    4. If WB Is Nothing Then Application.Wait DateAdd("s", 10, Now)
    5. Loop While WB Is Nothing
    6. End Sub
    7. Function OpenTable(Tabellenname As String, Pfad As String) As Workbook
    8. OpenTable = TableWorkbook(Tabellenname)
    9. On Error Resume Next
    10. If OpenTable Is Nothing Then Set OpenTable = Workbooks.Open(Filename:=Pfad & Tabellenname, ReadOnly:=True)
    11. End Function
    12. Function TableWorkbook(Tabellenname) As Workbook
    13. For Each WB In Workbooks
    14. If WB.Name = Tabellenname Then
    15. Set TableWorkbook = WB
    16. Exit Function
    17. End If
    18. Next WB
    19. End Function
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Wie wäre es damit:

    Visual Basic-Quellcode

    1. Sub TryOpen(Tabellenname As String, Pfad As String)
    2. Dim wb As Workbook
    3. On Error GoTo ReTry
    4. Set wb = Workbooks.Open(Filename:=Pfad & Tabellenname, ReadOnly:=True)
    5. On Error Resume Next
    6. If wb Is Nothing Then Set wb = Workbooks(Tabellenname) 'edit für bereits geöffnetes workbook ;)
    7. 'mach iwas mit der Datei
    8. Exit Sub
    9. ReTry:
    10. 'eventuell hier noch was einbauen um eine Endlosschleife zu verhindern ;)
    11. Application.Wait DateAdd("s", 10, Now)
    12. Resume
    13. End Sub


    LG
    Das ist meine Signatur und sie wird wunderbar sein!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mono“ ()

    Ist der Timer in Excel wie bei Word ? Also nur immer ein Timer vorhanden ? Wenn ja, dann muss man das - falls - etwas anderes auch noch timergesteuert ablaufen soll, berücksichtigen.
    Also @ Mr77: Timer Einsatz vorher mal recherchieren. 8o
    Hilfreiche Antworten als solche zu Kennzeichnen wäre klasse 8-)

    ftzdOp schrieb:

    Also nur immer ein Timer vorhanden ?
    (Excel-)VBA kennt kein Multithreading und es gibt eigentlich gar keine Timer.
    Application.Wait ist mit einem synchronen Sleep vergleichbar.

    Will man echte Timer verwenden, lässt sich allerdings die WinAPI-Funktion SetTimer einbinden.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --