Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Datei geöffnet Prüfung
#1
Hallo miteinander,

gern würde ich prüfen, ob eine Datei offen steht.

ich habe nun gefühlte 20 Codes aus dem inet durch. Jedoch kommt entweder immer die Antwort "Datei steht offen" oder immer "Datei ist geschlossen"

Diese beiden hier habe ich als Bsp angefügt.

Datei immer offen:
Code:
Private Function DateiGeoeffnet(DerPfad As String) As Boolean
' Bei shared Workbooks, schreibgeschützten Mappen o.ä.. kann dies auch ein falsch zurückgeben.
   On Error Resume Next
   Open DerPfad For Binary Access Read Lock Read As #1
   Close #1
   If Err.Number <> 0 Then
       DateiGeoeffnet = True
       Err.Clear
   End If
End Function
Code:
Public Sub datei_geöffnet_prüfung()
   Dim sPfad As String
   sPfad = "G:\ordner1\ordner2\test1.xlsm" ' Pfad ändern für Tests
   MsgBox "datei steht offen", DateiGeoeffnet(sPfad)

   
End Sub

Datei immer geschlossen:
Code:
Function IsFIleOpen(sFile As String) As Boolean
  Dim wkb As Object
  On Error Resume Next
  Set wkb = Workbooks(sFile)
  If Err = 0 And Not wkb Is Nothing Then
     IsFIleOpen = True
  End If
  On Error GoTo 0
End Function
Code:
Sub Prüfung()
Dim sFile As String
  sFile = "G:\ordner1\ordner2\test1.xlsm"
  If IsFIleOpen(sFile) Then
  MsgBox "Geöffnet"
  Else
   MsgBox "Nicht geöffnet"
  Exit Sub
  End If
End Sub

Wie kann das sein?
Bzw was kann ich tun damit das richtig erkannt wird?

Liebe Grüße 
Klaus
Antworten Top
#2
Hallo,

warum nicht Variante 21?

Wenn eine xlsx - Datei geöffnet wird, wird zuerst eine temporäre Kopie angelegt. Diese sollte mit einem einfachen DIR-Befehl geprüft werden können.

Code:
Pfad = "c:\temp\"
gesuchteDatei = "meineXLSX.xlsx"

if dir(Pfad & "~" & gesuchteDatei) <> vbnullstring then msgbox "offen"

(ungeprüft)

mfg
Antworten Top
#3
Vielen Dank Fennek,

das muss ich auf der Arbeit mal prüfen, ob ich da im Netzwerk überhaupt an den Temp Ordner ran komme...
Hätte ich besser sagen sollen dass das im Endstadium im Firmennetzwerk laufen soll... sorry

wie müsste man den Code dann erweitern, damit auch auswirft wenn / das die Datei geschlossen ist?

Liebe Grüße
Klaus
Antworten Top
#4
die temporäre Kopie ist NICHT im tmp-Ordner, sondern im selben Ordner wie die xlsx.

Falls Du sie nicht gehen solltest, musst Du im Explorer die "Anzeige versteckte Dateien" anklicken.
Antworten Top
#5
Hallöchen,

oder so:

Zitat:Sub test()
MsgBox Dir(ThisWorkbook.Path & "\~$" & ThisWorkbook.Name, vbHidden)
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#6
Hallo

ich habe den ungetesteten Code von Fennek so ans laufen gebracht.  Der von Schauan funktioniert auch, bezieht sich aber nur auf ThisWorkbook.
Mit Fenneks Version, erweitert um vbHidden, kann man jede beliebige Datei prüfen. Die Idee stammte von Schauan. Ich habe beides nur kombiniert.

mfg Gast 123

Code:
Sub Test()   'Code von Fennek
 sFile = "F:\Excel Clever Forum 2019\"
 Datei = "Test.xlsm"
 If Dir(sFile & "~$" & Datei, vbHidden) <> Empty Then MsgBox "offen"
End Sub
Antworten Top
#7
Hallo,

zuerst danke für die Ausarbeitung der Idee. Hier eine Ergänzung:

Ziel ist es den Namen eines beliebigen geöffneten Workbooks zu finden.

Im Test habe ich mit LO eine Datei erstellt und gespeichert, aber LO nicht geschlossen. Bekannt ist der Ordner, hier "Desktop". Die temporäre Datei ist ".~lock.Test.ods#"

Vorschlag 1: DIR

Code:
CMD: dir c:\users\xxxx\desktop\*.* /ah

Vorschlag 2: Tasklist

Code:
CMD: tasklist /v  /fi "imagename eq soffice.bin"

Der Name der Datei muss jeweils mit String/Array-Befehlen identifiziert werden. Diese Ansätze sollten auch bei anderen Instanzen funktionieren.

In der selben Instanz kann man einfach die Workbooks iterieren.

mfg

(eine Anpassung auch die Schlüsselwort von Excel und der Aufruf von CMD aus VBA ist kein Problem)

(Ergänzung: Powershell: get-childitem -Path C:\Users\xxxx\Desktop -Hidden -Name
)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste