Функція GetObject

Примітка : Функція, метод, об’єкт або властивість, описана в цьому розділі, недоступна, якщо Microsoft Jet Expression Service працює в режимі ізольованого програмного середовища, що запобігає обчисленню потенційно небезпечних виразів. Щоб отримати докладні відомості про режим ізольованого програмного середовища, у вікні довідки шукайте за запитом "режим ізольованого програмного середовища".

Повертає посилання на об’єкт, наданий компонентом ActiveX.

Синтаксис

GetObject([pathname ] [, class ] )

Синтаксис функції GetObject має такі аргументи:

Аргумент

Опис

pathname

Необов’язковий аргумент. Дані типу Variant (String). Повний шлях та ім’я файлу, що містить об’єкт, який потрібно відновити. Якщо аргумент pathname опущено, стає обов’язковим аргумент class.

class

Необов’язковий аргумент. Дані типу Variant (String). Рядок, що позначає клас об’єкта.


Аргумент class використовує синтаксис appname.objecttype і складається з таких частин:

Частина

Опис

appname

Обов’язкова частина. Дані типу Variant (String). Ім’я програми, що надає об’єкт.

objecttype

Обов’язкова частина. Дані типу Variant (String). Тип або клас об’єкта, який потрібно створити.


Примітки

Примітка : У прикладах нижче показано використання цієї функції в модулі Visual Basic for Applications (VBA). Щоб отримати докладні відомості про використання модуля VBA, клацніть пункт Довідник розробника в розкривному списку поряд із полем Пошук і введіть у поле пошуку принаймні один термін.

Використовуйте функцію GetObject, щоб отримати доступ до об’єкта ActiveX із файлу та призначити об’єкт змінній об’єкта. Використовуйте оператор Set, щоб призначити об’єкт, повернутий функцією GetObject, змінній об’єкта. Наприклад:

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

Якщо виконати цей код, запуститься програма, пов’язана з указаним аргументом pathname, і активується об’єкт у зазначеному файлі.

Якщо аргумент pathname – це рядок нульової довжини (""), то функція 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, "Hello, world."
MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"

Примітка :  Використовуйте функцію GetObject, коли є поточний екземпляр об’єкта або якщо потрібно створити об’єкт з уже завантаженим файлом. Якщо поточного екземпляра немає та ви не хочете запускати об’єкт із завантаженим файлом, використовуйте функцію CreateObject.

Якщо об’єкт зареєструвався як об’єкт в одному екземплярі, то створюється тільки один екземпляр об’єкта незалежно від того, скільки разів виконується функція CreateObject. З об’єктом в одному екземплярі функція GetObject завжди повертає той самий екземпляр, коли в її синтаксисі міститься рядок нульової довжини (""), а якщо опустити аргумент pathname, стається помилка. За допомогою функції GetObject не можна отримати посилання на клас, створений за допомогою Visual Basic.

Приклад

У цьому прикладі функцію GetObject використано, щоб отримати посилання на певний аркуш Microsoft Office Excel 2007 (MyXL). Властивість Application аркуша використовується, щоб зробити програму Excel видимою, закрити її тощо. Використовуючи два виклики API, процедура DetectExcel Sub шукає програму Excel, і якщо вона працює, вводить її в поточну таблицю об’єктів. Перший виклик GetObject призводить до помилки, якщо програму Microsoft Excel ще не запущено. У наведеному прикладі через помилку для прапорця ExcelWasNotRunning встановлюється значення True. Другий виклик GetObject визначає файл, який потрібно відкрити. Якщо програму Excel ще не запущено, другий виклик запускає її та повертає посилання на аркуш, представлений указаним файлом, mytest.xls. Файл має існувати у вказаному розташуванні; в іншому разі у Visual Basic згенерується помилка автоматизації. Крім того, наведений код робить видимими програму Excel і вікно, що містить вказаний аркуш. Нарешті, якщо попередні версії Excel не запускалися, код використовує метод Quit об’єкта Application, щоб закрити програму 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

Ця інформація корисна?

Дякуємо за ваш відгук!

Дякуємо за відгук! Схоже, вам може стати в нагоді допомога одного з наших спеціалістів служби підтримки Office, з яким ми вас можемо з’єднати.

×