freigebenen Datei prüfen ob bereits geöffnet
#1
Hallo zusammen,

wenn ich eine Eingabemaske (User Form) öffne werden im Hintergrund zwei Excel Dateien geöffnet. Vor dem öffnen prüfe ich ob die Datei bereits geöffnet ist.

Das funktioniert auch, wenn die Datei nicht freigegeben ist.

Gibt es eine Möglichkeit das auch bei einer freigegebene Datei zu prüfen? Kann doch eigentlich nicht so schwer sein zu prüfen ob auf dem eigenen Rechner eine Datei bereits offen ist, oder?

Danke und sonnige Grüße.
Top
#2
Hallo,

vielleicht hast Du hiermit Glück: Datei geöffnet ?

Gruß Uwe
Top
#3
Hallo,

ungeprüft, daher nnur ein möglicher Ansatz:
Code:
sub geoeffnet()
for each WB in workrbooks
if WB.name = "meineDatei.xlsx" then msgbox "eöffent"
next WB
end sub


Einige Änderungen sind bestimmt nötig.

mfg
Top
#4
Hallo Fennek,

wenn ich das so nehme geht es nicht. Alleine bekomme ich das leider auch nicht hin.

Code:
Sub geoeffnet()
For Each WB In Workbooks
If WB.Name = "Test.xlsm" Then
     MsgBox "geöffent"
Else
     MsgBox "wird neu geöffnet"
End If

Next WB
End Sub
Gruß
Top
#5
Hallo Kuwer,

leider bekomme ich bei deinem Vorschlag auch ein falsches Ergebnis, wie es ja auch auf deiner verlinkten Seite bereits beschrieben wird.

Bei den freigegeben Dateien scheint es wohl nicht soooo einfach zu sein... Dodgy

Gruß
Top
#6
Hallo SOS,

es sind zwei grundsätzliche andere Ansätze:

Kuwer's Tip sagt, ob ANDERE die Datei geöffnet haben
mein Ansatz war es zu prüfen, ob der USER die Datei bereits geöffnet hat

Deine Fragestellung kann in beiden Richtungen verstanden werden.

Meine Variante:


Code:
Sub Test()
iPath = "c:\temp\"
iFile = "myN.xlsm"
If Not WB_open(iFile) Then Workbooks.Open (iPath & iFile)
End Sub

Function WB_open(ByVal WB As String) As Boolean
   For Each WBK In Workbooks
       If WBK.Name = WB Then WB_open = True: Exit For
   Next WBK
End Function


mfg
Top
#7
Hallo mfg,

(22.06.2017, 14:07)Fennek schrieb: Kuwer's Tip sagt, ob ANDERE die Datei geöffnet haben

dann hast Du das nicht richtig gelesen oder verstanden. Wink

Gruß Uwe
Top
#8
Hallo Uwe,

Nachfrage:


Code:
Zitat aus der genannten Quelle:

Aber wer kann mir denn sagen ob die Datei nicht in einer anderen Excel Instanz geöffnet ist oder was weiß ich.

Dein Vorschlag erfasst nach meinem Verständnis, ob eine Datei bereits geöffnet ist, vom User, einer anderen xl-Instanz des User oder einem anderen User. Mein Vorschlag erfasst lediglich, ob eine Datei bereits von derselben Instanz geöffnet ist, aber ist m.E. einfacher zu verstehen und zu programmieren.

Wenn diese Einschätzung nicht zutreffend sein sollte, werde ich gerne dazu lernen.

mfg
Top
#9
Hallo

für den Fall das die Datei im gleichen Excel System geöffnet ist klappt der Code von Fennek hervorragend!
Ich habe mir nur erlaubt das Wort "Workbooks" richtig zu schreiben. dannn klappt es bei mir.

(sollte äch Schreibfehler haben:  ä statt i : + statt ü ; y statt z  liegt es am Tastatur Treiber, der passt nächt!) 
 
mfg  Gast 123

Code:
Sub geoeffnet_neu()
For Each WB In Workbooks
If WB.Name = "Test 2017.xls" Then MsgBox "geöffent"
Next WB
End Sub
Top
#10
Code:
Option Explicit

Private Declare Function lOpen Lib "kernel32" Alias "_lopen" _
   (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long
Private Declare Function lClose Lib "kernel32" _
   Alias "_lclose" (ByVal hFile As Long) 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 = -1
   hdlFile = lOpen(strFullPath_FileName, OF_SHARE_EXCLUSIVE)
   If hdlFile = -1 Then
       lastErr = Err.LastDllError
   Else
       lClose (hdlFile)
   End If
   FileIsOpen = (hdlFile = -1) And (lastErr = 32)
End Function
Sub CheckFileOpen()
   If FileIsOpen("Full File Name") Then
       MsgBox "File Is open"
   Else
       MsgBox "File Is Not open"
   End If
End Sub
[-] Folgende(r) 1 Nutzer sagt Danke an Storax für diesen Beitrag:
  • Fennek
Top


Gehe zu:


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