GetObject-Funktion

Gibt einen Verweis auf ein Objekt zurück, das von einer ActiveX-Komponente bereitgestellt wird.

Syntax

GetObject([ pathname ], [ class ])

Die Syntax der GetObject-Funktion verfügt über die folgenden benannten Argumente:

Teil Beschreibung
pathname Optional; Variant (String). Der vollständige Pfad und der Name der Datei, die das abzurufende Objekt enthält. Wird pathname weggelassen, ist class erforderlich.
Klasse Optional; Variant (String). Diese Zeichenfolge repräsentiert die Klasse eines Objekts.

Das Argument class verwendet die Syntax appname. objecttype und umfasst die folgenden Teile:

Teil Beschreibung
appname Erforderlich; Variant (String). Der Name der Anwendung, die das Objekt bereitstellt.
Objekttyp Erforderlich; Variant (String). Der Typ oder die Klasse des zu erstellenden Objekts.

Hinweise

Verwenden Sie die GetObject-Funktion, um auf ein ActiveX-Objekt aus einer Datei zuzugreifen, und weisen Sie das Objekt einer Objektvariable zu. Verwenden Sie die festlegen-Anweisung, um das von GetObject zurückgegebene Objekt der Objektvariable zuweisen. Beispiel:

Dim CADObject As Object
Set CADObject = GetObject("C:\CAD\SCHEMA.CAD")

Wird dieser Code ausgeführt, wird die Anwendung gestartet, die mit dem verknüpften Pfadname angegeben wird und das Objekt in der angegebenen Datei wird aktiviert.

Wenn Pfadname eine Zeichenfolge mit einer Länge von Null ist (""), gibt GetObject eine neue Objektinstanz des angegebenen Typs zurück. Wenn das Pfadname-Argument ausgelassen wird, gibt GetObject ein derzeit aktives Objekt des angegebenen Typs zurück. Existiert kein Objekt vom angegebenen Typ, tritt ein Fehler auf.

Einige Programme ermöglichen es Ihnen, einen Teil einer Datei zu aktivieren. Fügen Sie ein Ausrufezeichen (!) an das Ende des Dateinamens und lassen Sie eine Zeichenfolge darauf folgen, die den Teil der Datei kennzeichnet, den Sie aktivieren möchten. Informationen zum Erstellen dieser Zeichenfolge finden Sie in der Dokumentation für die Anwendung, die das Objekt erstellt hat.

Sie haben beispielsweise in einem CAD-Programm mehrere Ebenen in einer Zeichnung, die in einer Datei gespeichert ist. Sie könnten den folgenden Code verwenden, um eine Ebene in einer Zeichnung mit der Bezeichnung SCHEMA.CAD zu aktivieren:

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

Wenn Sie keine Klasse des Objekts angeben, bestimmt die Automatisierung die Anwendung, damit sie gestartet wird und das zu aktivierende Objekt auf Grundlage des Dateinamens, den Sie angegeben haben. Einige Dateienn werden jedoch möglicherweise mehr unterstützt als eine Klasse des Objekts. Eine Zeichnung unterstützt möglicherweise drei verschiedenen Objekttypen: ein Application-Objekt, ein Drawing-Objekt, und ein Toolbar-Objekt, die alle Teil derselben Datei sind. Um anzugeben, welches Objekt in einer Datei Sie aktivieren möchten, können Sie das optionale Argument Klasse verwenden. Beispiel:

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

Im Beispiel ist FIGMENT der Name eines Zeichenprogramms und DRAWING eines der Objekttypen, die es unterstützt. Nachdem ein Objekt aktiviert wurde, verweisen Sie in Ihrem Code mithilfe der Objektvariable darauf, die Sie definiert haben. Im vorherigen Beispiel greifen Sie mithilfe der Objektvariable MyObject auf Eigenschaften und Methoden des neuen Objekts zu. Beispiel:

MyObject.Line 9, 90
MyObject.InsertText 9, 100, "Hello, world."
MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"

Hinweis

Verwenden Sie die GetObject-Funktion, wenn eine aktuelle Instanz des Objekts vorhanden ist oder Sie das zu erstellende Objekt mit einer Datei bereits geladen haben. Wenn keine aktuelle Instanz vorhanden ist, und Sie nicht möchten, dass das Objekt mit einer geladenen Datei startet, verwenden Sie die CreateObject-Funktion.

Wenn sich ein Objekt als Objekt einer einzigen Instanz registriert hat, wird nur eine Instanz des Objekts erstellt, unabhängig davon, wie oft CreateObject ausgeführt wird. Da ein einzelnes Instanzobjekt GetObject immer dieselbe Instanz zurückgibt, wenn die Zeichenfolge mit einer Längensyntax von Null ("") zurückgegeben wird, wird ein Fehler verursacht, wenn das Agrument Pfadname ausgelassen wird. GetObject kann nicht verwendet werden, um einen Verweis zu einer Klasse abzurufen, die mit Visual Basic erstellt wurde.

Beispiel

Dieses Beispiel verwendet die GetObject-Funktion, um einen Verweis für ein bestimmtes Microsoft Excel-Arbeitsblatt (MyXL) abzurufen. Es verwendet die Application-Eigenschaft des Arbeitsblatts, um Microsoft Excel sichtbar zu machen, es zu schließen usw..

Mithilfe von zwei API-Aufrufen sucht die DetectExcelSub-Prozedur nach Microsoft Excel und gibt es in die Ausgeführte Objekttabelle ein.

Der erste Aufruf von GetObject verursacht einen Fehler, wenn Microsoft Excel noch nicht ausgeführt wird. Im Beispiel bewirkt der Fehler, dass die ExcelWasNotRunning-Kennzeichnung auf True festgelegt wird.

Der zweite Aufruf von GetObject gibt eine zu öffnende Datei an. Wenn Microsoft Excel noch nicht ausgeführt wird, wird es durch den zweiten Aufruf gestartet und gibt einen Verweis an das Tabellenblatt zurück, in Form der angegebenen Datei MYTEST.XLS. Die Datei muss am angegebenen Speicherort vorhanden sein; andernfalls wird der Visual Basic-Fehler Automation error generiert.

Als Nächstes wird durch den Beispielcode Microsoft Excel und das Fenster mit dem angegebenen Arbeitsblatt angezeigt. Wenn keine vorherige Version von Microsoft Excel ausgeführt wird, verwendet der Code die Quit-Methode des Application-Objekts, um Microsoft Excel zu schließen. Wenn die Anwendung bereits ausgeführt wurde, wird kein Versuch unternommen, es zu schließen. Der Verweis selbst wird aufgehoben, indem er auf Nichts festgelegt wird.

' 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

Siehe auch

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.