GetObject, functie

Van toepassing op
Access voor Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

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([pathname ] [, 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 argument klassegebruikt de syntaxis appname.objecttype en heeft 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 toegang te krijgen tot een ActiveX-object vanuit een bestand 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 die is gekoppeld aan de opgegeven padnaam gestart en wordt het object in het opgegeven bestand geactiveerd.

Als pathname een tekenreeks met lengte nul ('), retourneert GetObject een nieuw objectexemplaren van het opgegeven type. Als het argument pathname wordt weggelaten, retourneert GetObject een actief object van het opgegeven type. 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 volg deze met een tekenreeks die het deel 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 de volgende code gebruiken om een laag te activeren in een tekening met de naam SCHEMA.CAD:


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

Als u de klasse van het object niet opgeeft, bepaalt Automation de toepassing die moet worden gestart en het object dat moet worden geactiveerd, op basis van de bestandsnaam die 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 klasseargument. Bijvoorbeeld:


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

In het voorbeeld FIGMENT is de naam van een tekentoepassing en 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 voorgaande voorbeeld opent u eigenschappen en methoden van het nieuwe object 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 (MyXL) op te halen. 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 geen eerdere versie van Excel werd uitgevoerd, gebruikt de code ten slotte de methode Quit 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