Wednesday, June 29, 2022

GetObject-Funktion

Hinweis: Die in diesem Thema beschriebenen Funktionen, Methoden, Objekte oder Eigenschaften sind deaktiviert, wenn der Microsoft Jet-Ausdrucksdienst im Sandkastenmodus ausgeführt wird, wodurch die Auswertung potenziell unsicherer Ausdrücke verhindert wird. Um weitere Informationen zum Sandbox-Modus zu erhalten, suchen Sie in der Hilfe nach „Sandbox-Modus".

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

Syntax

GetObject( [ Pfadname ] [ , Klasse ] )

Die Syntax der GetObject- Funktion hat die folgenden Argumente:

Streit

Beschreibung

Pfadname

Optional. Variante ( Zeichenfolge ). Der vollständige Pfad und Name der Datei, die das abzurufende Objekt enthält. Wenn der Pfadname weggelassen wird, ist die Klasse erforderlich.

Klasse

Optional. Variante ( Zeichenfolge ). Eine Zeichenfolge, die die Klasse des Objekts darstellt.


Das Klassenargument verwendet die Syntax appname . Objekttyp und hat diese Teile:

Teil

Beschreibung

App Name

Erforderlich. Variante ( Zeichenfolge ). Der Name der Anwendung, die das Objekt bereitstellt.

Objekttyp

Erforderlich. Variante ( Zeichenfolge ). Der Typ oder die Klasse des zu erstellenden Objekts.


Bemerkungen

Hinweis: Die folgenden Beispiele veranschaulichen die Verwendung dieser Funktion in einem Visual Basic for Applications (VBA)-Modul. Um weitere Informationen zum Arbeiten mit VBA zu erhalten, wählen Sie Entwicklerreferenz in der Dropdown-Liste neben Suchen aus und geben Sie einen oder mehrere Begriffe in das Suchfeld ein.

Verwenden Sie die GetObject- Funktion, um auf ein ActiveX-Objekt aus einer Datei zuzugreifen und das Objekt einer Objektvariablen zuzuweisen. Verwenden Sie die Set -Anweisung, um das von GetObject zurückgegebene Objekt der Objektvariablen zuzuweisen. Zum Beispiel:

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

Wenn dieser Code ausgeführt wird, wird die dem angegebenen Pfadnamen zugeordnete Anwendung gestartet und das Objekt in der angegebenen Datei aktiviert.

Wenn Pfadname eine leere Zeichenfolge ("") ist, gibt GetObject eine neue Objektinstanz des angegebenen Typs zurück. Wenn das Pfadname -Argument weggelassen wird, gibt GetObject ein derzeit aktives Objekt des angegebenen Typs zurück. Wenn kein Objekt des angegebenen Typs vorhanden ist, tritt ein Fehler auf.

Bei einigen Anwendungen können Sie einen Teil einer Datei aktivieren. Fügen Sie am Ende des Dateinamens ein Ausrufezeichen ( ! ) hinzu und folgen Sie ihm mit einer Zeichenfolge, die den Teil der Datei identifiziert, den Sie aktivieren möchten. Informationen zum Erstellen dieser Zeichenfolge finden Sie in der Dokumentation der Anwendung, die das Objekt erstellt hat.

In einer Zeichnungsanwendung können Sie beispielsweise mehrere Ebenen zu einer Zeichnung haben, die in einer Datei gespeichert ist. Sie könnten den folgenden Code verwenden, um eine Ebene innerhalb einer Zeichnung mit dem Namen SCHEMA.CAD zu aktivieren:

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

Wenn Sie die Klasse des Objekts nicht angeben, bestimmt Automation die zu startende Anwendung und das zu aktivierende Objekt basierend auf dem von Ihnen angegebenen Dateinamen. Einige Dateien können jedoch mehr als eine Objektklasse unterstützen. Beispielsweise kann eine Zeichnung drei verschiedene Objekttypen unterstützen: ein Anwendungsobjekt , ein Zeichnungsobjekt und ein Symbolleistenobjekt , die alle Teil derselben Datei sind. Um anzugeben, welches Objekt in einer Datei Sie aktivieren möchten, verwenden Sie das optionale Klassenargument . Zum Beispiel:

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

Im Beispiel ist FIGMENT der Name einer Zeichenanwendung und DRAWING einer der unterstützten Objekttypen.

Sobald ein Objekt aktiviert ist, verweisen Sie im Code darauf, indem Sie die von Ihnen definierte Objektvariable verwenden. Im vorherigen Beispiel greifen Sie auf Eigenschaften und Methoden des neuen Objekts zu, indem Sie die Objektvariable MyObject verwenden . Zum 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 wenn Sie das Objekt mit einer bereits geladenen Datei erstellen möchten. Wenn es keine aktuelle Instanz gibt und Sie nicht möchten, dass das Objekt mit einer geladenen Datei gestartet wird, verwenden Sie die CreateObject- Funktion.

Wenn sich ein Objekt als Einzelinstanzobjekt registriert hat, wird nur eine Instanz des Objekts erstellt, unabhängig davon, wie oft CreateObject ausgeführt wird. Bei einem Objekt mit einer einzelnen Instanz gibt GetObject immer dieselbe Instanz zurück, wenn es mit der Syntax der leeren Zeichenfolge ("") aufgerufen wird, und es verursacht einen Fehler, wenn das Argument pathname weggelassen wird. Sie können GetObject nicht verwenden, um einen Verweis auf eine mit Visual Basic erstellte Klasse abzurufen.

Beispiel

In diesem Beispiel wird die GetObject- Funktion verwendet, um einen Verweis auf ein bestimmtes Microsoft Office Excel 2007-Arbeitsblatt ( MyXL ) abzurufen. Es verwendet die Application -Eigenschaft des Arbeitsblatts, um Excel sichtbar zu machen, es zu schließen und so weiter. Unter Verwendung von zwei API-Aufrufen sucht die DetectExcel Sub -Prozedur nach Excel und trägt es, wenn es ausgeführt wird, in die Running Object Table ein. Der erste Aufruf von GetObject verursacht einen Fehler, wenn Microsoft Excel nicht bereits ausgeführt wird. Im Beispiel führt der Fehler dazu, dass das ExcelWasNotRunning-Flag auf True gesetzt wird. Der zweite Aufruf von GetObject gibt eine zu öffnende Datei an. Wenn Excel noch nicht ausgeführt wird, startet es der zweite Aufruf und gibt einen Verweis auf das Arbeitsblatt zurück, das durch die angegebene Datei mytest.xls repräsentiert wird. Die Datei muss am angegebenen Speicherort vorhanden sein; Andernfalls wird der Visual Basic-Fehler Automatisierungsfehler generiert. Als Nächstes macht der Beispielcode sowohl Excel als auch das Fenster sichtbar, das das angegebene Arbeitsblatt enthält. Wenn schließlich keine vorherige Version von Excel ausgeführt wurde, verwendet der Code die Methode Qui t des Application -Objekts, um Excel zu schließen. Wenn die Anwendung bereits ausgeführt wurde, wird nicht versucht, sie zu schließen. Die Referenz selbst wird freigegeben, indem sie auf Nothing gesetzt 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

No comments:

Post a Comment