これは前の質問からの続きです。Excel ファイルが Outlook マクロ (Office 2010) からローカルで開いているかどうかを確認するために、提案された修正を試みました。
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
FullFilePath
(例: )で指定された開いているファイルまたは閉じているファイルの場合"C:\Data\Data.xlsx"
:
Set xlApp = GetObject(FullFilePath).Application
どちらの方法でもエラーは0です。(つまり、ファイルが開いていない場合は開きます。)
Set xlApp = GetObject(Dir(FullFilePath)).Application
どちらの場合も -214722120 になります。(自動化エラー)
Set xlApp = GetObject(, "Excel.Application")
開いているときは0、開いていないときは429になります。下記参照。
Set xlApp = GetObject(Dir(FullFilePath), "Excel.Application")
どちらの場合も432になります。(自動化操作中にファイル名またはクラス名が見つからない)
Set xlApp = GetObject(FullFilePath, "Excel.Application")
どちらの場合も432になります。
そのため、最初に提案された修正 (上部のリンクを参照) が機能する唯一のケースは、ローカルで開いている Excel の最初のインスタンスにない限り、ファイルを見つけることができません。実例)。
最終的に、ファイルがネットワーク上で開いているかどうかを確認し、ローカルで開いているかどうかを確認したいと思います。