Забележка: Функцията, методът, обектът или свойството, описани в тази тема, се забраняват, ако услугата microsoft Jet Expression се изпълнява в ограничителен режим, което предотвратява оценяването на потенциално опасни изрази. За повече информация относно ограничителния режим потърсете "ограничителен режим" в помощта.
Връща препратка към обект, предоставен от ActiveX компонент.
Синтаксис
GetObject([име_път ] [, клас ] )
Синтаксисът на функцията GetObject има следните аргументи:
Аргумент |
Описание |
---|---|
Pathname |
Незадължително. Variant (String). Пълният път и името на файла, съдържащ обекта за извличане. Ако име на път е пропуснато, класът е задължителен. |
клас |
Незадължително. Variant (String). Низ, представляващ клас на обекта. |
Класът ,аргумент използва името на приложението за синтаксис.objecttype и има следните части:
Част |
Описание |
---|---|
име на приложение |
Задължително. Variant (String). Името на приложението, предоставящо обекта. |
тип на обект |
Задължително. Variant (String). Типът или класът на обекта, който трябва да се създаде. |
Забележки
Забележка: Примерите по-долу илюстрират използването на тази функция във Visual Basic for Applications (VBA). За повече информация относно работата с VBA изберете Справочни материали за разработчици в падащия списък до Търсене и въведете един или няколко термина в полето за търсене.
Използвайте функцията 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 , графичен обект и обект 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 винаги връща същия екземпляр, когато е извикан със синтаксис с низ с нулева дължина ("") и предизвиква грешка, ако аргументът име на път е пропуснат. Не можете да използвате GetObject , за да получите препратка към клас, създаден с Visual Basic.
Пример
Този пример използва функцията GetObject , за да получи препратка към конкретен работен лист на Excel (MyXL). Той използва свойството Приложение на работния лист, за да направи Excel видим, да го затвори и т.н. Като използва две извиквания на API, процедурата DetectExcel Sub търси Excel и ако се изпълнява, я въвежда в таблицата с изпълнявани обекти. Първото повикване на GetObject причинява грешка, ако Microsoft Excel все още не се изпълнява. В примера грешката води до задаване на флага ExcelWasNotRunning на True. Второто повикване на GetObject задава файл за отваряне. Ако Excel все още не се изпълнява, второто повикване го стартира и връща препратка към работния лист, представен от зададения файл, mytest.xls. Файлът трябва да съществува на зададеното място; В противен случай се генерира грешка за автоматизиране на грешките на Visual Basic. След това примерният код прави видим както Excel, така и прозорецът, съдържащ указания работен лист. И накрая, ако няма предишна версия на Excel, която да се изпълнява, кодът използва метода Quit на обекта Application, за да затвори 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