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.

questionAnswers(3)

yourAnswerToTheQuestion