Opmerking: De functie, methode, object of eigenschap die in dit onderwerp wordt beschreven, is uitgeschakeld als de Microsoft Jet Expression-service wordt uitgevoerd in de sandbox-modus, waardoor de evaluatie van mogelijk onveilige expressies wordt voorkomen. Zoek naar 'sandbox-modus' in de Help voor meer informatie over de sandboxmodus.
Retourneert een verwijzing naar een object dat wordt aangeboden door een ActiveX-component.
Syntaxis
GetObject([padnaam ] [, klasse ] )
De syntaxis van de functie GetObject bevat deze argumenten:
Argument |
Beschrijving |
---|---|
padnaam |
Optioneel. Variant (tekenreeks). Het volledige pad en de naam van het bestand met het object dat u wilt opvragen. Als padnaam wordt weggelaten, is klasse vereist. |
klasse |
Optioneel. Variant (tekenreeks). Een tekenreeks die de klasse van het object vertegenwoordigt. |
Het klasse-argument gebruikt de syntaxis appnaam.objecttype en bestaat uit deze onderdelen:
Onderdeel |
Beschrijving |
---|---|
toepassingsnaam |
Vereist. Variant (tekenreeks). De naam van de toepassing die het object levert. |
objecttype |
Vereist. Variant (tekenreeks). Het type of de klasse van het object dat moet worden gemaakt. |
Opmerkingen
Opmerking: In de volgende voorbeelden wordt het gebruik van deze functie in een VBA-module (Visual Basic for Applications) toegelicht. Meer informatie over het werken met VBA vindt u door in de vervolgkeuzelijst naast Zoeken de optie Referentie voor ontwikkelaars te selecteren en een of meer termen in het zoekvenster te typen.
Gebruik de functie GetObject om een ActiveX-object uit een bestand op te vragen en het object toe te wijzen aan een objectvariabele. Gebruik de instructie Set om het object dat het resultaat is van GetObject, toe te wijzen aan de objectvariabele. Bijvoorbeeld:
Dim CADObject As Object
Set CADObject = GetObject("C:\CAD\SCHEMA.CAD")
Wanneer deze code wordt uitgevoerd, wordt de toepassing gestart die is gekoppeld aan de opgegeven padnaam waarna het object in het opgegeven bestand wordt geactiveerd.
Als padnaam een tekenreeks met de lengte nul is (""), retourneert GetObject een nieuw objectexemplaar van het opgegeven type. Als het argument padnaam wordt weggelaten, retourneert GetObject een object van het opgegeven type dat momenteel actief is. Er treedt een fout op als er geen object van het opgegeven type bestaat.
Bij bepaalde toepassingen is het mogelijk om een deel van een bestand te activeren. Voeg een uitroepteken (!) toe aan het einde van de bestandsnaam en typt daarna de tekenreeks die het gedeelte van het bestand aangeeft dat u wilt activeren. Als u meer wilt weten over de samenstelling van deze tekenreeks, raadpleegt u de documentatie van de toepassing waarmee het object is gemaakt.
In een tekenprogramma kunt u bijvoorbeeld meerdere lagen van een tekening opslaan in een bestand. U kunt dan de volgende code gebruiken om de derde laag in de tekening SCHEMA.CAD te activeren:
Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")
Als u de klasse van het object niet opgeeft, bepaalt Automatisering welke toepassing moet worden gestart en welk object moet worden geactiveerd, op basis van de naam van het bestand dat u opgeeft. Het is echter mogelijk dat sommige bestanden meer dan één klasse object ondersteunen. Een tekening kan bijvoorbeeld drie verschillende typen objecten ondersteunen: een Application-object, een Drawing-object en een Toolbar-object, die allemaal deel uitmaken van hetzelfde bestand. Als u wilt opgeven welk object in een bestand u wilt activeren, gebruikt u het optionele argument klasse. Bijvoorbeeld:
Dim MyObject As Object
Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", _
"FIGMENT.DRAWING")
In het voorbeeld is FIGMENT de naam van een tekenprogramma en is DRAWING een van de objecttypen die worden ondersteund.
Wanneer een object is geactiveerd, kunt u er in code naar verwijzen met behulp van de objectvariabele die u hebt gedefinieerd. In het vorige voorbeeld vraagt u de eigenschappen en methoden van het nieuwe object op met behulp van de objectvariabele MyObject. Bijvoorbeeld:
MyObject.Line 9, 90
MyObject.InsertText 9, 100, "Hello, world."
MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"
Opmerking: Gebruik de functie GetObject als er een actueel exemplaar van het object bestaat of als u het object wilt maken terwijl er al een bestand is geladen. Als er geen actueel exemplaar is, en u het object niet wilt maken terwijl er een bestand is geladen, gebruikt u de functie CreateObject.
Als een object zichzelf heeft geregistreerd als een object met één exemplaar, wordt er maar één exemplaar van het object gemaakt, ongeacht hoe vaak CreateObject wordt uitgevoerd. Met een object met één exemplaar retourneert GetObject altijd hetzelfde exemplaar wanneer het wordt aangeroepen met de syntaxis van de tekenreeks met lengte nul ('). Dit veroorzaakt een fout als het argument pathname wordt weggelaten. U kunt GetObject niet gebruiken om een verwijzing te verkrijgen naar een klasse die is gemaakt met Visual Basic.
Voorbeeld
In dit voorbeeld wordt de functie GetObject gebruikt om een verwijzing naar een specifiek Excel-werkblad op te halen (MyXL). De toepassingseigenschap van het werkblad wordt gebruikt om Excel zichtbaar te maken, te sluiten, enzovoort. Met behulp van twee API-aanroepen zoekt de DetectExcel Sub-procedure naar Excel. Als deze wordt uitgevoerd, wordt deze in de tabel Running Object ingevoerd. De eerste aanroep van GetObject veroorzaakt een fout als Microsoft Excel nog niet wordt uitgevoerd. In het voorbeeld zorgt de fout ervoor dat de vlag ExcelWasNotRunning wordt ingesteld op True. De tweede aanroep van GetObject geeft een bestand op dat moet worden geopend. Als Excel nog niet wordt uitgevoerd, wordt de tweede aanroep gestart en wordt een verwijzing geretourneerd naar het werkblad dat wordt vertegenwoordigd door het opgegeven bestand, mytest.xls. Het bestand moet zich op de opgegeven locatie bevinden. Anders wordt de Visual Basic-fout Automation-fout gegenereerd. Vervolgens maakt de voorbeeldcode zowel Excel als het venster met het opgegeven werkblad zichtbaar. Als er ten slotte geen eerdere versie van Excel werd uitgevoerd, gebruikt de code de Qui t-methode van het toepassingsobject om Excel te sluiten. Als de toepassing al werd uitgevoerd, wordt er geen poging gedaan om deze te sluiten. De verwijzing zelf wordt vrijgegeven door deze in te stellen op Niets.
' 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