Sprawdź, czy program Excel jest otwarty (z innej aplikacji pakietu Office 2010)
To pytanie jest kontynuacją poprzedniego pytania, które zadałemtutaj. Używam sugerowanej poprawki, aby sprawdzić, czy plik Excel jest otwarty lokalnie z makra Outlook (Office 2010), ale nie działa zgodnie z oczekiwaniami. Oto mój kod, który może zawieść.
Public Sub UpdateFileIndex(ByVal FullFilePath As String, ByVal DocNo As String)
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.WorkSheet
On Error Resume Next
Set xlApp = GetObject(FullFilePath).Application
Debug.Print "Error = " & Err
If Err.Number = 0 Then ' Workbook is open locally
' Do stuff
ElseIf Err.Number = 429 Then ' Workbook is not open locally
' Do different stuff
End If
' Do a bunch of other stuff
End Sub
Teraz dla otwartych lub zamkniętych plików podanych przezFullFilePath
(na przykład."C:\Data\Data.xlsx"
):
Set xlApp = GetObject(FullFilePath).Application
daje mi 0 błędów w obu przypadkach. (tzn. otwiera plik, jeśli nie jest otwarty).
Set xlApp = GetObject(Dir(FullFilePath)).Application
daje mi -214722120 dla obu przypadków. (Błąd automatyzacji)
Set xlApp = GetObject(, "Excel.Application")
daje mi 0, gdy jest otwarty i 429, gdy nie jest otwarty. Aha?! Zobacz poniżej.
Set xlApp = GetObject(Dir(FullFilePath), "Excel.Application")
daje mi 432 w obu przypadkach. (Nazwa pliku lub nazwa klasy nie została znaleziona podczas operacji automatyzacji)
Set xlApp = GetObject(FullFilePath, "Excel.Application")
daje mi 432 w obu przypadkach.
Zatem jedynym przypadkiem, który działa, jest początkowo sugerowana poprawka (patrz link na górze), która nie może znaleźć pliku, chyba że jest w pierwszej instancji programu Excel otwartej lokalnie, co nie zawsze musi mieć miejsce (tj. Może być otwarte za sekundę instancja.)
Czy robię coś źle, czy nie powinienem używać tej metody do sprawdzania? Ostatecznie chciałbym sprawdzić, czy plik jest otwarty w sieci, a jeśli jest, sprawdź, czy plik jest otwarty lokalnie.