Функция 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 и обратная связь.