Забележка
Функцията, методът, обектът или свойството, описани в тази тема, са забранени, ако услугата за изрази Microsoft Jet се изпълнява в ограничителен режим, което пречи на изчисляването на потенциално опасни изрази. За повече информация относно ограничителния режим потърсете "ограничителен режим" в помощта.
Връща препратка към обект, предоставен от ActiveX компонент.
Синтаксис
GetObject([име_на_път ] [, клас ] )
Синтаксисът на функцията GetObject има следните аргументи:
| Аргумент | Описание |
|---|---|
| име на път | Незадължително. Variant (String). Пълният път и името на файла, съдържащ обекта за извличане. Ако pathname е пропуснато, клас е задължителен. |
| клас | Незадължително. Variant (String). Низ, представляващ класа на обекта. |
Аргументът на класаизползва синтаксиса appname.objecttype и има следните части:
| Част | Описание |
|---|---|
| Име на приложение | Задължително. Variant (String). Името на приложението, предоставящо обекта. |
| тип обект | Задължително. Variant (String). Типът или класът на обекта, който искате да създадете. |
Забележки
Забележка
Примерите по-долу илюстрират използването на тази функция във Visual Basic for Applications (VBA). За повече информация относно работата с VBA изберете Справочни материали за разработчици в падащия списък до Търсене и въведете един или няколко термина в полето за търсене.
Използвайте функцията GetObject за достъп до ActiveX обект от файл и за присвояване на обекта на променлива за обект. Използвайте командата set , за да присвоите обекта, върнат от GetObject , за променливата object. Например:
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")
Ако не зададете класа на обекта, автоматизацията определя приложението за стартиране и обекта за активиране въз основа на предоставеното от вас име на файла. Някои файлове обаче може да поддържат повече от един клас обекти. Например един чертеж може да поддържа три различни типа обекти: обект на приложение , графичен обект и обект на лента с инструменти, които са част от един и същ файл. За да зададете кой обект във файла искате да активирате, използвайте незадължителния аргумент на класа . Например:
Dim MyObject As Object
Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", _
"FIGMENT.DRAWING")
В примера FIGMENT е името на графичното приложение и DRAWING е един от типовете обекти, които то поддържа.
След като даден обект е активиран, вие го посочвате в код, като използвате дефинираната променлива на object. В предишния пример получавате достъп до свойствата и методите на новия обект с помощта на променливата MyObjectobject. Например:
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). Той използва свойството "Приложение " на работния лист, за да направи Excel видим, да го затвори и т.н. Използвайки две извиквания на API, подпроцедурата DetectExcel търси Excel и ако се изпълнява, го въвежда в таблицата с изпълнявани обекти. Първото извикване на GetObject причинява грешка, ако Microsoft Excel все още не се изпълнява. В примера грешката е причина флагът ExcelWasNotRunning да бъде зададен на "Истина". Второто извикване на GetObject указва файл за отваряне. Ако Excel все още не се изпълнява, второто повикване го стартира и връща препратка към работния лист, представен от указания файл, mytest.xls. Файлът трябва да съществува в указаното местоположение; в противен случай се генерира грешката Visual Basic error Automation. След това примерният код прави видими както Excel, така и прозореца, съдържащ указания работен лист. И накрая, ако не е имало предишна версия на Excel, кодът използва метода Quit на обекта на приложението, за да затвори Excel. Ако приложението вече е било изпълнявано, не се прави опит да го затворите. Самата препратка се освобождава чрез настройване на "Нищо".
' 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