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.

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.
Antworten Top
#2
Hallo,

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

Gruß Uwe
Antworten 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
Antworten 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ß
Antworten 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ß
Antworten 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
Antworten Top
#7
Hallo mfg,

(22.06.2017, 13: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
Antworten 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
Antworten 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
Antworten 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
Antworten Top


Gehe zu:


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