Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1816to1820
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Kann Datei aktuell beschrieben werden ?

Kann Datei aktuell beschrieben werden ?
06.03.2021 17:33:38
Bernhard
Hallo Experten,
es werden mehrere Dateien genutzt (z.B. "DateiA", "DateiB") die, wenn sie gespeichert werden, eine bestimmte Zieldatei (z.B. "DateiPrüf") öffnen, Daten dort hineinschreiben und Dateiprüf dann wieder schliessen. Funktioniert so weit.
Problem: Es sind deutlich mehr als nur die beiden Dateien A und B in Benutzung und es kann passieren, dass zwei Dateien genau gleichzeitig auf DateiPrüf zugreifen wollen.
Ich habe gehofft, dass mit Hilfe von Application.Workbooks z.B. DateiB erkennt, dass DateiA gerade DateiPrüf geöffnet hat und Daten reinschreibt. Mit einem Timer sollte DateiB 30 Sekunden warten und dann versuchen DateiPrüf zu öffnen. Ganz so einfach ist es offenbar nicht.
Anmerkung: Die Erkennung funktioniert, wenn ich einfach DateiPrüf öffne und versuche DateiA oder DateiB zu speichern.
Wenn es zur "Kollision" kommt, erscheint auf dem Bildschirm des Users der etwas zu spät kommt ein Fenster, das vorschlägt eine Kopie von DateiPrüf zu speichern. Wenn man das abbricht erscheint der Hinweis, dass DateiPrüf wieder verfügbar ist mit Optionen, wie weiter zu verfahren ist.
Das geht für die Anwendung gar nicht, weil die User damit überhaupt nichts am Hut haben.
Mit welcher Funktion kann ich erkennen, dass DateiPrüf gerade besetzt ist ?
Wenn es nichts derartiges gibt, wie kann ich dann verhindern, dass die User mit den o.g. Dialogen konfrontiert werden ?
Es wäre für mich ausreichend, wenn die Datei, die zu spät versucht zuzugreifen, einfach keine Daten übertragen kann und die Aktion "geräuschlos" abgebrochen wird.
Für Vorschläge wäre ich sehr dankbar !
Gruß Bernhard

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kann Datei aktuell beschrieben werden ?
06.03.2021 17:50:19
Nepumuk
Hallo Bernhard,
ein Beispiel:
Option Explicit

Private Declare PtrSafe Function lopen Lib "kernel32.dll" Alias "_lopen" ( _
    ByVal lpPathName As String, _
    ByVal iReadWrite As Long) As Long
Private Declare PtrSafe Function lclose Lib "kernel32.dll" Alias "_lclose" ( _
    ByVal hFile As Long) As Long
Private Declare PtrSafe Sub Sleep Lib "kernel32.dll" ( _
    ByVal dwMilliseconds As Long)

Private Const OF_SHARE_EXCLUSIVE = &H10

Private Function FileIsOpen(strFullPath_FileName As String) As Boolean
    Dim hdlFile As Long
    Dim lastErr As Long
    hdlFile = lopen(strFullPath_FileName, OF_SHARE_EXCLUSIVE)
    If hdlFile = -1 Then
        lastErr = Err.LastDllError
    Else
        Call lclose(hdlFile)
    End If
    FileIsOpen = (hdlFile = -1) And (lastErr = 32)
End Function

Public Sub Test()
    
    Const FILE_PATH As String = "H:\DateiPrüf.xlsx" ' Anpassen !!!
    
    Dim objWorkbook As Workbook
    
    Do
        
        If Not FileIsOpen(FILE_PATH) Then Exit Do
        
        Call Sleep(1000)
        
    Loop
    
    Set objWorkbook = Workbooks.Open(Filename:=FILE_PATH)
    
    ' Mach was
    
    Call objWorkbook.Close(SaveChanges:=True)
    
    Set objWorkbook = Nothing
    
End Sub

Gruß
Nepumuk

Anzeige
AW: Kann Datei aktuell beschrieben werden ?
06.03.2021 18:51:47
Bernhard
Hallo Nepomuk,
krass, ich versuche das zu verstehen und einzubauen. Viielen Dank !
Gruß Bernhard

AW: Kann Datei aktuell beschrieben werden ?
06.03.2021 22:21:35
Bernhard
Hurra es klappt !
Jetzt bleibt nur ein kleines Problem übrig:
Const FILE_PATH As String = "H:\DateiPrüf.xlsx"
Der Pfad ist abhängig davon, über welchen Account ein User arbeitet. Kann "G" oder "E" sein.
Bisher habe ich das so gelöst:
b = Left(ActiveWorkbook.Path, 1)
und dann z.B.
Workbooks.Open b & ":\usw..
Das mag Const aber nicht.
Was kann man da machen ?
Schlimmstenfalls müßte ich die Klärung vor dem Modul machen, das ganze doppelt anlegen und abhängig vom Laufwerksbuchstaben das richtige Modul aufrufen. Kann mir aber vorstellen, dass es dafür eine einfachere Lösung gibt.
Kann mir jemand weiterhelfen ?
LG Bernhard

Anzeige
AW: Kann Datei aktuell beschrieben werden ?
06.03.2021 22:43:44
ralf_b
dann lass das Const weg und nimm einfach ein dim .

AW: Kann Datei aktuell beschrieben werden ?
06.03.2021 23:02:39
Bernhard
Ah, ok. Danke !
LG Bernhard

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige