특정 Excel 인스턴스 내에서 VBA 프로그램을 실행하는 경우 다른 Excel 인스턴스를 만들고 새로 만든 인스턴스에서 통합 문서를 열고 수정 한 다음 해당 인스턴스를 닫을 수 있습니다. 그러나 매크로 내에서 다른 Excel 인스턴스가 이미 실행 중인지 확인하고 실행중인 경우 해당 인스턴스를 제어하는 ​​방법이 궁금 할 수 있습니다.

이 작업을 수행 할 수있는 몇 가지 방법이 있습니다. 실행중인 Excel 인스턴스 수만 알고 싶다면 Windows API를 사용하는 매크로를 사용할 수 있습니다. 다음 함수는이 접근 방식을 구현합니다.

Public Declare Function GetDesktopWindow Lib "user32" () As Long Public Declare Function FindWindowEx Lib "user32" Alias _   "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

Function ExcelInstances() As Long     Dim hWndDesk As Long     Dim hWndXL As Long

'Get a handle to the desktop     hWndDesk = GetDesktopWindow

Do         'Get the next Excel window         hWndXL = FindWindowEx(GetDesktopWindow, hWndXL, _           "XLMAIN", vbNullString)



'If we got one, increment the count         If hWndXL > 0 Then             ExcelInstances = ExcelInstances + 1         End If

'Loop until we've found them all     Loop Until hWndXL = 0 End Function

이 코드는 Excel MVP Stephen Bullen이 개발했으며 다음 사이트에서 찾을 수 있습니다.

http://www.officekb.com/Uwe/Forum.aspx/excel-prog/55941

이것은 분명히 Excel의 개별 인스턴스에 대한 액세스를 허용하지 않습니다. 열린 인스턴스 수만 반환합니다. 인스턴스를 사용하기위한 코드를 개발하려는 경우 Windows API에 의존 할 필요가 없습니다. 대신 다음과 같은 코드를 사용하여 Excel 인스턴스가 열려 있는지 확인할 수 있습니다.

Dim xlApp As Excel.Application Set xlApp = GetObject(, "Excel.Application")

인스턴스가 실행 중이면 xlApp 개체를 사용하여 액세스 할 수 있습니다. 인스턴스가 실행 중이 아니면 런타임 오류가 발생합니다. GetObject 함수는로드 된 첫 번째 Excel 인스턴스를 가져옵니다. 다른 사람에게 접근하려면 해당 항목을 닫은 다음 GetObject를 다시 시도하여 다음 항목을 가져올 수 있습니다.

xlApp을 특정 Excel 인스턴스로 설정하려는 경우 해당 인스턴스에서 열려있는 통합 문서의 이름을 알고 있으면 그렇게 할 수 있습니다.

Dim xlApp As Excel.Application Set xlApp = GetObject("ExampleBook.xlsx").Application

_ 참고 : _

이 페이지 (또는 ExcelTips 사이트의 다른 페이지)에 설명 된 매크로를 사용하는 방법을 알고 싶으면 유용한 정보가 포함 된 특별 페이지를 준비했습니다.

link : / excelribbon-ExcelTipsMacros [새 브라우저 탭에서 특별 페이지를 열려면 여기를 클릭하세요].

_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.

이 팁 (9452)은 Microsoft Excel 2007, 2010 및 2013에 적용됩니다. 여기에서 Excel의 이전 메뉴 인터페이스에 대한이 팁의 버전을 찾을 수 있습니다.

link : / excel-Finding_Other_Instances_of_Excel_in_a_Macro [매크로에서 다른 Excel 인스턴스 찾기].