Функція GetObject

Застосовується до
Access для Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Примітка.

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

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

Синтаксис

GetObject([pathname ] [; class ] )

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

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

Аргумент класувикористовує синтаксис 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 є рядком нульової довжини (""), функція GetObject повертає новий екземпляр об'єкта вказаного типу. Якщо аргумент pathname опущено, функція GetObject повертає активний об'єкт вказаного типу. Якщо не існує жодного об’єкта вказаного типу, стається помилка.

Деякі програми дають змогу активувати частину файлу. У кінці імені файлу додайте знак оклику (!), а потім рядок, що визначає частину файлу, яку потрібно активувати. Відомості про те, як створити цей рядок, див. в документації до програми, яка створила об'єкт.

Наприклад, у програмі для креслення може бути кілька шарів креслення, збереженого у файлі. Ви можете використовувати наведений нижче код, щоб активувати шар у кресленні під назвою SCHEMA.CAD:


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

Якщо не вказати клас об'єкта, автоматизація на основі наданого вами імені файлу визначає програму, яку потрібно запустити, і об'єкт, який потрібно активувати. Проте деякі файли можуть підтримувати більше одного класу об’єкта. Так, креслення може підтримувати три різні типи об’єктів: Application, Drawing і Toolbar – усі вони входять до складу одного файлу. Щоб указати, який об'єкт у файлі потрібно активувати, використайте аргумент класу optional. Наприклад:


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

У прикладі – це ім'я програми DRAWING для креслення; це один із типів об'єктів, FIGMENT які вона підтримує.

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