Zu Beginn habe ich eine Funktion in VBA Excel, die mir sagt, ob ein Word-Dokument geöffnet oder nicht geöffnet ist. Zu Testzwecken habe ich das Word-Dokument nicht geöffnet und erwarte, dass 'Falsch' zurückgegeben wird.VBA Excel - Makro sagt mir Word-Dokument ist offen, obwohl es nicht geöffnet ist
Function IsFileOpen(filename As String) As Boolean
Dim filenum As Integer, errnum As Integer
On Error Resume Next ' Turn error checking off.
filenum = FreeFile() ' Get a free file number.
' Attempt to open the file and lock it.
Open filename For Input Lock Read As #filenum
Close filenum ' Close the file.
errnum = Err ' Save the error number that occurred.
On Error GoTo 0 ' Turn error checking back on.
' Check to see which error occurred.
Select Case errnum
' No error occurred.
' File is NOT already open by another user.
Case 0
IsFileOpen = False
' Error number for "Permission Denied."
' File is already opened by another user.
Case 70
IsFileOpen = True
' Another error occurred.
Case Else
Error errnum
End Select
End Function
Genannt Via:
...
If IsFileOpen("C:/Temp/test.docx") = True Then
MsgBox objWord.ActiveDocument.Name & " already open" 'ERROR FROM PIC HERE
Set objDoc = objWord.ActiveDocument
Else
Set objDoc = objWord.Documents.Open("C:/Temp/test.docx", Visible:=True)
End If
...
jedoch, wenn der Code ausgeführt wird ich, dass das Dokument geöffnet ist (True zurückgegeben von der IsFileOpen Funktion von Fall 70) aber ich erhalte eine Fehlermeldung auf ‚objWord.ActiveDocument .name‘, dass kein Dokument
Auf Windows 7 Task-Manager geöffnet ist, ist es das, was ich habe. Word-Anwendung ist geschlossen, aber es scheint, dass Hintergrundprozesse von Word geöffnet sind. Jedoch habe ich alle Dokumente schließe ich nicht verwenden, so sollten diese Prozesse nicht laufen
Was ist der Debugger Ihnen sagen, wenn Sie einen Haltepunkt auf 'wenn IsFileOpen' und Schritt durch den Code festgelegt? –
Zunächst müssen Sie Ihre Object-Probleme in VBA beheben - stellen Sie sicher, ob objWord recht und dereferenziert ist, wenn Sie Ihr VBA-Modul beenden. Es scheint, dass Sie hinter den Kulissen viele Word-Prozesse geöffnet haben. Da Sie Word nicht sichtbar machen, können Sie sie nicht sehen, um sie manuell zu schließen, und weil Sie Word in Ihrem Code nicht beenden, bleiben sie herum. – dbmitch
Sie haben verschiedene Instanzen von Word (was wahrscheinlich daran liegt, dass Sie niemals die Instanz schließen, sondern nur das Dokument). "Dokumente" aus Ihrer Instanz und "Dokumente" aus diesen Instanzen sind unterschiedliche "Dokumente". Ihr gesamter Ansatz ist jedoch falsch, und abhängig von Ihrem eigentlichen Ziel müssen Sie sich entweder nur um Ihre eigenen 'Dokumente' kümmern oder sich [GetObject] ansehen (https://msdn.microsoft.com/en-us/library/ Büro/gg251785.aspx). – GSerg