이 질문은 이전 질문에서 계속됩니다. here. Excel 파일이 Outlook 매크로 (Office 2010)에서 로컬로 열리는 지 확인하기 위해 제안 된 수정을 사용하고 있지만 예상대로 작동하지 않습니다. 아마도 내 코드가 실패 할 수 있습니다.Excel이 열려 있는지 확인하십시오 (다른 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의 첫 번째 인스턴스에 있지 않는 한 파일을 찾을 수없는 초기에 제안 된 수정입니다 (맨 위 링크 참조). 항상 그렇지는 않습니다 (즉, 두 번째 인스턴스에서 엽니 다.)
내가 잘못했거나 확인하는 데이 방법을 사용하지 않아야합니까? 궁극적으로 파일이 네트워크에 열려 있는지 확인한 다음 로컬로 열려 있는지 확인합니다.
좋습니다. 나는 그것을 시도 할 것이다. 도와 주신 Siddharth에게 정말 고마워요. –
마지막 매개 변수로 sFileName을 사용하려면'cWnd = FindWindowEx (mWnd, 0 &, "EXCEL7", filewithoutExt)'를 변경하면 완벽하게 작동합니다. 다시 한번 감사드립니다. –
마지막으로 한가지 생각 ...'전화 AccessibleObjectFromWindow (CWND, OBJID_NATIVEOM, IDispatch를, WB)이'내가 DocNo의 값에 따라 워크 시트 개체에 링크 할 후 (사용'xlSheet = ...'설정). 'With'구조에서이 작업을 수행하는 방법을 잘 모르겠습니다. 이 작업을 수행하거나 통합 문서 개체에 직접 연결하는 방법이 있습니까 (예 : Set xlBook = xlApp.Workbooks ("File Index.xlsx") 또는 무엇인가). 고맙습니다! 여기 많이 배우고 있습니다 :) –