GetObject, functie

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

Opmerking

De functie, de methode, het object of de eigenschap die in dit onderwerp wordt beschreven, is uitgeschakeld als de Microsoft Jet Expression-service wordt uitgevoerd in de sandboxmodus. Hierdoor wordt de evaluatie van potentieel onveilige expressies voorkomen. Zoek in de Help naar 'sandbox-modus' voor meer informatie over de sandbox-modus.

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 argument klassebevat de volgende syntaxis appname.objecttype:

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 en wordt het object in het opgegeven bestand 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 een laag in een tekening te activeren met de naam SCHEMA.CAD:


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 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 argument optionele klasse . Bijvoorbeeld:


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

In het voorbeeld FIGMENT is de naam van een tekenprogramma en DRAWING is dit 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. Bij een object met één exemplaar retourneert GetObject altijd hetzelfde exemplaar wanneer het wordt aangeroepen met de tekenreeks met de lengte nul (""), en het veroorzaakt een fout als het argument padnaam wordt weggelaten. U kunt GetObject niet gebruiken voor het verkrijgen van een verwijzing naar een klasse die met Visual Basic is gemaakt.

Voorbeeld

In dit voorbeeld wordt de functie GetObject gebruikt om een verwijzing naar een specifiek Excel-werkblad ()MyXL op te halen. De eigenschap Applicatie van het werkblad wordt gebruikt om Excel zichtbaar te maken, te sluiten, enzovoort. Met behulp van twee API-aanroepen zoekt de subprocedure ExcelDetecteren naar Excel en als deze wordt uitgevoerd, wordt deze ingevoerd in de actieve objecttabel. De eerste aanroep van GetObject veroorzaakt een fout als Microsoft Excel nog niet actief is. In het voorbeeld zorgt de fout ervoor dat de vlag ExcelWasNotRunning wordt ingesteld op True. Bij de tweede aanroep van GetObject wordt er een bestand opgegeven om te openen. Als Excel nog niet actief is, wordt deze bij de tweede aanroep gestart en wordt er een verwijzing geretourneerd naar het werkblad dat wordt vertegenwoordigd door het opgegeven bestand, mytest.xls. Het bestand moet op de opgegeven locatie aanwezig zijn; Anders wordt de Visual Basic-fout Automatisering gegenereerd. Vervolgens maakt de voorbeeldcode zowel Excel als het venster met het opgegeven werkblad zichtbaar. Ten slotte: als er geen eerdere versie van Excel actief was, gebruikt de code de methode Afsluiten van het toepassingsobject om Excel af te sluiten. Als de toepassing al actief is, wordt er geen poging ondernomen 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