Функция GetObject

Возвращает ссылку на объект, предоставляемый компонентом ActiveX.

Синтаксис

GetObject([ pathname ], [ класс ])

Синтаксис функции GetObject имеет следующие именованные аргументы:

Part Описание
путь Необязательный элемент, Variant (String). Полный тип и имя файла, содержащий объект, который требуется получить. Если аргумент имя_пути пропущен, класс является обязательным.
класс Необязательный элемент, Variant (String). Строка, представляющая класс объекта.

Аргументкласса использует синтаксис appname. objecttype и состоит из следующих частей:

Part Описание
имя_приложения Обязательный элемент; Variant (String). Имя приложения, предоставляющего объект.
тип_объекта Обязательный элемент, Variant (String). Тип класса или объекта, который требуется создать.

Замечания

Используйте функцию GetObject для доступа к объекту ActiveX из файла и назначения объекта объектной переменной. Используйте инструкцию Set , чтобы назначить объект, возвращенный GetObject , переменной объекта. Например:

Dim CADObject As Object
Set CADObject = GetObject("C:\CAD\SCHEMA.CAD")

При выполнении этого кода запускается приложение, связанное с указанным именем пути , и активируется объект в указанном файле.

Если имя_пути имеет пустую строку (""), GetObject возвращает новый экземпляр объекта указанного типа. Если аргумент имя_пути пропущен, функция GetObject возвращает текущий активный объект указанного типа. Если объект указанного типа не существует, происходит ошибка.

Некоторые приложения разрешают активировать часть файла. Добавьте восклицательный знак (!) в конец имени файла и следуйте за ним со строкой, определяющей часть файла, которую требуется активировать. Сведения о создании этой строки см. в документации по приложению, создавшего объект .

Например, в приложении рисования можно иметь несколько уровней для рисунка, сохраненного в файле. Можно использовать следующий код для активации слоя в документе с именем SCHEMA.CAD:

Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")

Если не указать класс объекта, автоматизация определяет приложение для запуска и объект для активации на основе указанного имени файла. Некоторые файлы, однако, могут поддерживать более одного класса объекта. Например, рисунок может поддерживать три различных типа объектов: объект Application, объект Drawing и объект Toolbar, каждый из которых является частью одного и того же файла. Чтобы указать, какой объект в файле требуется активировать, используйте необязательный аргумент класс. Например:

Dim MyObject As Object
Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", "FIGMENT.DRAWING")

В примере FIGMENT — это имя приложения для рисования и DRAWING один из поддерживаемых типов объектов. После активации объекта вы ссылаетесь на него в коде с помощью определенной объектной переменной. В предыдущем примере доступ к свойствам и методам нового объекта выполняется с помощью объектной переменной MyObject. Например:

MyObject.Line 9, 90
MyObject.InsertText 9, 100, "Hello, world."
MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"

Примечание.

Используйте функцию GetObject, когда имеется текущий экземпляр объекта или требуется создать объект с помощью уже загруженного файла. Если текущего экземпляра нет и вы не хотите, чтобы объект запускался с загруженным файлом, используйте функцию CreateObject .

Если объект зарегистрировал себя как объект типа "единственный экземпляр", создается только один экземпляр этого объекта независимо от того, сколько раз выполнялась функция CreateObject. При использовании объекта с одним экземпляром Метод GetObject всегда возвращает один и тот же экземпляр при вызове с синтаксисом строки нулевой длины ("") и вызывает ошибку, если аргумент pathname пропущен. Вы не можете использовать GetObject для получения ссылки на класс, созданный с помощью Visual Basic.

Пример

В этом примере функция GetObject используется для получения ссылки на определенный лист Microsoft Excel (MyXL). Она использует свойство Application листа, чтобы сделать видимым Microsoft Excel, закрыть его и т. п.

Используя два вызова API, DetectExcel процедура Sub ищет Microsoft Excel и, если она выполняется, вводит ее в таблицу выполняющихся объектов.

Первый вызов функции GetObject приводит к возникновению ошибки, если Microsoft Excel не выполняется. В этом примере ошибка приводит ExcelWasNotRunning к тому, что флагу присваивается значение True.

Второй вызов GetObject задает открытие файла. Если Microsoft Excel еще не выполняется, второй вызов запускает его и возвращает ссылку на лист, представленный указанным файлом, mytest.xls. Файл должен находиться в указанном расположении; В противном случае возникает ошибка Automation error Visual Basic.

Затем пример кода делает видимыми как Microsoft Excel, так и окно, содержащее указанный лист. Наконец, если не выполняется предыдущая версия Microsoft Excel, в коде используется метод Quit объекта Application для закрытия Microsoft Excel. Если приложение уже выполнялось, попытка закрыть его не предпринимается. Сама ссылка освобождается путем установки для нее значения Nothing.

' Declare necessary API routines:
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    ' Variable to hold reference
                                ' to Microsoft Excel.
    Dim ExcelWasNotRunning As Boolean    ' Flag for final release.

' Test to see if there is a copy of Microsoft Excel already running.
    On Error Resume Next    ' Defer error trapping.
' Getobject function called without the first argument returns a 
' reference to an instance of the application. If the application isn't
' running, an error occurs.
    Set MyXL = Getobject(, "Excel.Application")
    If Err.Number <> 0 Then ExcelWasNotRunning = True
    Err.Clear    ' Clear Err object in case error occurred.

' Check for Microsoft Excel. If Microsoft Excel is running,
' enter it into the Running Object table.
    DetectExcel

' Set the object variable to reference the file you want to see.
    Set MyXL = Getobject("c:\vb4\MYTEST.XLS")

' Show Microsoft Excel through its Application property. Then
' show the actual window containing the file using the Windows
' collection of the MyXL object reference.
    MyXL.Application.Visible = True
    MyXL.Parent.Windows(1).Visible = True
     Do manipulations of your  file here.
    ' ...
' If this copy of Microsoft Excel was not running when you
' started, close it using the Application property's Quit method.
' Note that when you try to quit Microsoft Excel, the
' title bar blinks and a message is displayed asking if you
' want to save any loaded files.
    If ExcelWasNotRunning = True Then 
        MyXL.Application.Quit
    End IF

    Set MyXL = Nothing    ' Release reference to the
                                ' application and spreadsheet.
End Sub

Sub DetectExcel()
' Procedure dectects a running Excel and registers it.
    Const WM_USER = 1024
    Dim hWnd As Long
' If Excel is running this API call returns its handle.
    hWnd = FindWindow("XLMAIN", 0)
    If hWnd = 0 Then    ' 0 means Excel not running.
        Exit Sub
    Else                
    ' Excel is running so use the SendMessage API 
    ' function to enter it in the Running Object Table.
        SendMessage hWnd, WM_USER + 18, 0, 0
    End If
End Sub

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.