Office 자동화 서버의 GetObject 및 CreateObject 동작

요약

이 문서에서는 다양한 버전의 Microsoft Office 애플리케이션에서 GetObject 및 CreateObject 함수를 사용할 때 발생하는 다양한 동작에 대해 설명합니다.

GetObject 및 CreateObject는 Microsoft Visual Basic 및 Microsoft VBA(Visual Basic for Applications)에서 제공하는 함수입니다. 그러나 GetObject에 대한 참조를 GetActiveObject API에 대한 호출로 처리하고 CreateObject를 CoCreateInstanceAPI에 대한 호출로 참조하는 경우 이 정보는 Microsoft Visual C++ 적용할 수도 있습니다.

추가 정보

Getobject

GetObject는 자동화 서버의 실행 중인 instance 연결하는 데 사용됩니다. GetObject를 호출하는 방법에는 몇 가지가 있지만 Microsoft Office 애플리케이션에 권장되는 구문은 다음과 같습니다.

set xlApp = GetObject(, "Excel.Application")

이 코드가 실행될 때 Microsoft Excel의 instance 실행 중인 경우 xlApp 변수를 통해 실행 중인 instance 개체 모델에 액세스할 수 있습니다. 실행 중인 instance 없는 경우 다음과 같은 트래핑 가능한 런타임 오류 메시지가 표시됩니다.

Run-time error '429':
ActiveX component can't create object  

여러 Microsoft Excel 인스턴스가 실행 중인 경우 GetObject는 먼저 시작된 instance 연결합니다. 그런 다음 첫 번째 instance 닫으면 GetObject에 대한 또 다른 호출이 시작된 두 번째 instance 연결됩니다.

해당 instance 열려 있는 문서의 이름을 알고 있는 경우 특정 instance 연결할 수 있습니다. 예를 들어 Excel의 instance Book2라는 개방형 통합 문서를 사용하여 실행 중인 경우 시작된 가장 이른 instance 아니더라도 다음 코드가 해당 instance 성공적으로 연결됩니다.

Set xlApp = GetObject("Book2").Application

Createobject

CreateObject는 Automation 서버의 새 instance 시작하는 데 사용됩니다. 예를 들면 다음과 같습니다.

set xlApp = CreateObject("Excel.Application")

서버가 SingleUse 또는 MultiUse로 디자인되었는지 여부에 따라 다른 서버 프로세스가 시작될 수도 있으며 시작되지 않을 수도 있습니다. 이는 Automation instance 강제로 종료해야 하는지 여부를 결정하는 데 중요한 차이점이 될 수 있습니다. 예를 들어 MultiUse 서버를 사용하면 연결하기 전에 instance 이미 실행 중인 경우 자동화를 완료할 때 프로그래밍 방식으로 서버를 종료하지 않도록 할 수 있습니다.

다음 표는 Microsoft Office에서 솔루션을 구현할 때 유용한 참조 역할을 합니다. 시작 시 서버가 기본적으로 표시되는지 여부, SingleUse 또는 MultiUse인 경우, UserControl 속성이 있는 경우, Quit 메서드가 있는 경우, 해당 기본 창의 클래스 이름 등 Microsoft Office의 다양한 버전 및 애플리케이션의 동작 및 특성을 나열합니다.

애플리케이션(들) 표시 인스턴스 UserControl이 있습니다. QuitClassName이 있습니다. 클래스 이름
Excel 97, 2000, 2002, 2003, 2007 아니오 SingleUse XlMain
Word 97, 2000, 2002, 2003, 2007 아니오 SingleUse OpusApp
PowerPoint 97 아니오 Multiuse 아니오 PP97FrameClass
PowerPoint 2000 아니오 Multiuse 아니오 PP9FrameClass
PowerPoint 2002 아니오 Multiuse 아니오 PP10FrameClass
PowerPoint 2003 아니오 Multiuse 아니오 PP11FrameClass
PowerPoint 2007 아니오 Multiuse 아니오 PP12FrameClass
Access 97 SingleUse OMain
Access 2000, 2002, 2003, 2007 아니오 SingleUse OMain
Project 98, 2000 아니오 Multiuse JWinproj-WhimperMainClass

기본 창 클래스 이름은 instance 이미 실행 중인지 편리하게 확인하려는 경우 FindWindow API를 호출하는 데 유용합니다. UserControl 속성은 마지막 참조가 해제될 때 서버 애플리케이션이 자동으로 종료되는지 여부를 나타내는 부울 속성입니다(nothing으로 설정됨). Quit 메서드를 사용하면 필요한 경우(예: 마지막 참조가 릴리스된 후 instance 종료되지 않는 경우) UserControl 속성을 재정의할 수 있습니다.

일반적으로 사용자가 사용할 수 있는 instance 연결하는 대신 Office 애플리케이션의 새 instance 사용하는 것이 좋습니다. Application ProgID를 사용하여 instance 만든 다음, 여기에서 새 개체를 열거나 만드는 것이 가장 좋습니다. Excel.Sheet 및 Word 같은 기타 ProgID입니다. 문서 등은 OLE(개체 연결 및 포함)에서 사용하기 위한 것이며 CreateObject와 함께 사용할 때 일관되지 않은 결과를 제공할 수 있습니다. Application ProgID를 사용하면 자동화용 서버를 명시적으로 시작하여 잠재적인 문제를 방지할 수 있습니다(포함 안 됨).

Automation 서버를 완료하면 모든 참조를 해제하고 서버가 예상대로 종료되도록 Quit 메서드(사용 가능한 경우)를 호출합니다. Automation을 통해 instance 구성한 다음 사용자가 사용할 수 있도록 열어 두려면 UserControl 속성을 TRUE로 설정한 다음 모든 참조를 해제해야 합니다. 그러면 UserControl 속성이 TRUE이기 때문에 서버가 계속 실행되고 사용자가 애플리케이션을 닫을 때(미해결 참조가 없기 때문에) 적절하게 종료됩니다.

참고 Word UserControl 속성은 읽기 전용입니다. True 또는 False로 설정할 수 없습니다. Word 마지막 참조가 해제될 때 항상 실행 중입니다.