Registriert seit: 23.05.2017
Version(en): 2013
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.
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo,
vielleicht hast Du hiermit Glück:
Datei geöffnet ?Gruß Uwe
Registriert seit: 06.12.2015
Version(en): 2016
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
Registriert seit: 23.05.2017
Version(en): 2013
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ß
Registriert seit: 23.05.2017
Version(en): 2013
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...
Gruß
Registriert seit: 06.12.2015
Version(en): 2016
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
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
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.
Gruß Uwe
Registriert seit: 06.12.2015
Version(en): 2016
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
Registriert seit: 12.03.2016
Version(en): Excel 2003
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
Registriert seit: 25.04.2016
Version(en): 2013
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:1 Nutzer sagt Danke an Storax für diesen Beitrag 28
• Fennek