◆ GetObject 함수
파일에서 ActiveX 개체에 대한 참조를 반환합니다.
구문 GetObject([pathname] [, class])
GetObject 함수 구문에는 명명된 인수가 있습니다.
|
구성 요소 |
설명 |
|
pathname class |
선택 사항; Variant (String). 검색할 개체가 있는 파일과 전체 경로 이름 pathname이 빠져 있으면 class가 필요합니다. 선택 사항; Variant (String). 개체의 클래스를 나타내는 문자열. |
|
|
클래스 인수는 구문 appname.objecttype을 사용하며 다음과 같은 구성 요소로 되어 있습니다
.
|
구성 요소 |
설명 |
|
appname objecttype |
필수 사항; Variant (String). 개체를 제공하는 응용 프로그램 이름. 필수 사항; Variant (String). 만들 개체의 클래스와 형식. |
|
|
참고
GetObject 함수로 파일에서 ActiveX 개체를 액세스하고 개체를 개체 변수에 지정합니다. Set 문으로 GetObject가 반환한 개체를 개체 변수에 지정합니다.
예: Dim CADObject As Object
Set CADObject = GetObject("C:\CAD\SCHEMA.CAD")
위 코드를 실행하면 지정된 pathname과 관련된 응용 프로그램이 시작되고 지정된 파일의 개체가 활성화됩니다.
pathname이 길이가 0인 문자열("")이면 GetObject는 지정된 형식의 새 개체 인스턴스를 반환합니다. pathname 인수가 생략되어 있으면 GetObject는 지정된 형식의 현재 개체를 반환합니다. 지정된 형식의 개체가 없으면 오류가 일어납니다.
파일의 일부만 활성화할 수 있는 응용 프로그램도 있습니다. 파일 이름 끝에 느낌표(!)를 붙이고 활성화할 파일 부분을 식별하는 문자열을 씁니다. 이 문자열을 만드는 자세한 방법은 개체를 만든 응용 프로그램 문서를 참고하십시오.
예를 들어, 그리기 응용 프로그램이라면 파일에 저장된 그림에 여러 층이 있을 것입니다. 다음 코드로 SCHEMA.CAD라는 그림의 한 층을 활성화할 수 있습니다.
Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")
개체의 class를 지정하지 않으면 사용자가 제공한 파일 이름에 따라 자동화에 의하여 시작할 응용 프로그램과 활성화할 개체를 결정합니다. 하지만 여러 클래스의 개체를 지원하는 파일도 있습니다. 예를 들어, 그리기는 Application 개체, Drawing 개체, Toolbar 개체의 세 가지를 지원하는 데 이들은 모두 같은 파일의 부분입니다. 활성화할 개체를 지정하러면 선택적 class 인수를 사용하십시오.
예: Dim MyObject As Object
Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", "FIGMENT.DRAWING")
위 예에서 , FIGMENT는 그리기 응용 프로그램 이름이며 DRAWING은 지원되는 개체 형식의 하나입니다.
개체가 활성화되면 코드에서 지정한 개체 변수로 해당 개체를 참조할 수 있습니다. 위 예에서는 개체 변수 MyObject로 새 개체의 속성과 메서드를 액세스할 수 있습니다.
예: MyObject.Line 9, 90
MyObject.InsertText 9, 100, "안녕하십니까."
MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"
메모 개체의 현재 인스턴스가 있거나 이미 로드된 파일로 개체를 만들려면 GetObject 함수를 사용합니다. 현재 인스턴스가 없고 로드된 파일로 개체를 시작하지 않으려면 CreateObject 함수를 사용하십시오.
개체가 단일 인스턴스 개체로 자기 등록하지 않으면 CreateObject를 여러 번 실행해도 개체당 하나의 인스턴스만이 만들어집니다. 단일 인스턴스 개체일 때 GetObject는 길이가 0인 문자열("") 구문으로 호출할 때 항상 같은 인스턴스를 만들고 pathname 인수가 없으면 오류가 일어납니다. GetObject는 Visual Basic으로 만든 클래스 참조를 얻는 데는 사용할 수 없습니다.
|
ActiveX 개체 자동 인터페이스를 통하여 다른 응용 프로그램이나 응용 프로그램 도구에 나타나는 개체를 의미합니다. 클래스 개체의 형식적 정의를 의미합니다. 클래스는 수행 중 개체의 인스턴스가 만들어지는 서식 파일처럼 수행됩니다. 클래스는 개체의 속성과 개체의 동작을 제어하는 방법을 정의합니다. 속성 개체의 명명된 속성을 의미합니다. 속성은 크기, 색상, 화면 위치와 같은 개체의 특성이나 가능 또는 불가능과 같은 개체의 상태를 정의합니다. 메서드 개체에 실행되는 프로시저를 의미합니다. |
|
|
GetObject 함수 예제
다음은 GetObject 함수로 특정 Microsoft Excel워크시트(MyXL)를 참조하는 예입니다. 워크시트의 Application 속성으로 Microsoft Excel을 표시하고 닫는 등의 작업을 합니다. 두 API 호출을 사용하면 DetectExcel Sub 프로시저는 Microsoft Excel을 찾고 실행 중이면 Running Object Table에 입력합니다. GetObject의 첫 번째 호출은 Microsoft Excel이 실행 중이 아니면 오류를 일으킵니다. 예에서는 오류 때문에 ExcelWasNotRunning 플래그가 True로 설정되었습니다. 두 번째 GetObject 호출은 파일을 열도록 지정합니다. Microsoft Excel이 실행 중이 아니면 두 번째 호출로 프로그램을 시작하고 지정된 파일 mytest.xls 가 표시한 워크시트 참조를 반환합니다. 파일은 지정 위치에 있어야 합니다. 그렇지 않으면 Visual Basic Automation 오류가 일어납니다. 다음은 Microsoft Excel과 지정된 워크시트 창을 모두 표시하는 예입니다. 마지막으로 실행 중인 이전 버전의 Microsoft Excel이 없으면 Application 개체의 Quit 메서드로 Microsoft Excel을 종료합니다. 응용 프로그램이 이미 실행 중이면 이런 시도는 하지 않습니다. 참조 역시 Nothing에 설정되어 해제됩니다.
' 필요한 API 루틴을 선언합니다.
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName as String, _
ByVal lpWindowName As Long) As Long
Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long _
ByVal wParam as Long _
ByVal lParam As Long) As Long
Sub GetExcel()
Dim MyXL As Object ' Microsoft Excel에 대한 참조를 취할 변수.
Dim ExcelWasNotRunning As Boolean ' 마지막 해제 플래그.
' 실행 중인 Microsoft Excel 복사본이 있는지 검사하십시오.
On Error Resume Next ' 오류 추적을 보류하십시오.
' 첫 번재 인수 없이 호출된 Getobject 함수는 응용 프로그램 인스턴스에 대한 참조를 반환합니다.
‘ 응용 프로그램을 실행 중이 아니면 오류가 일어납니다.
Set MyXL = Getobject(, "Excel.Application")
If Err.Number <> 0 Then ExcelWasNotRunning = True
Err.Clear ' 오류가 일어나면 Err 개체를 지우십시오.
' Microsoft Excel을 확인합니다. Microsoft Excel이 실행 중이면 Running Object table에 입력하십시오.
DetectExcel
Set MyXL = Getobject("c:\vb4\MYTEST.XLS") ' 개체 변수를 볼 파일에 대한 참조로 설정합니다.
' Application 속성으로 Microsoft Excel을 표시합니다. 그런 다음, MyXL 개체 참조의 Windows 컬렉션을 사용하는 파 ‘ 일이 포함된 실제 창을 표시합니다.
MyXL.Application.Visible = True
MyXL.Parent.Windows(1).Visible = True
' 여기서 파일을
' 조작합니다.
' ...
' 시작했을 때 Microsoft Excel 복사본 실행 중이 아니였으면 Application 속성의 Quit 메서드로 종료합니다.
' Microsoft Excel을 종료할 때 제목 표시줄이 깜박이고 읽어들인 파일을 저장할 것인지 묻는 메시지가 표시되는지 확 ‘ 인합니다.
If ExcelWasNotRunning = True Then
MyXL.Application.Quit
End IF
Set MyXL = Nothing ' 응용 프로그램과 스프레드시트에 대한
End Sub ' 참조를 해제합니다.
Sub DetectExcel()
' 프로시저는 실행 중인 Excel을 탐지하고 등록합니다.
Const WM_USER = 1024
Dim hWnd As Long
' Excel이 실행 중이면 API 호출은 핸들을 반환합니다.
hWnd = FindWindow("XLMAIN", 0)
If hWnd = 0 Then ' 0 means Excel not running.
Exit Sub
Else
' Excel이 샐행 중이므로 SendMessage API 함수로 Running Object Table에 입력합니다.
SendMessage hWnd, WM_USER + 18, 0, 0
End If
End Sub