VBA-Programmierung in Microsoft Excel

Tutorial: Excel-Beispiele

VBA-Begriff: GetObject-Funktion (Beispiel)

In diesem Beispiel wird die GetObject-Funktion verwendet, um einen Verweis auf ein bestimmtes Microsoft Excel-Tabellenblatt (MyXL) zu erhalten. Es verwendet die Application-Eigenschaft des Tabellenblatts, um Microsoft Excel anzuzeigen, es zu schließen usw. Mit Hilfe zweier API-Aufrufe sucht die Sub-Prozedur DetectExcel nach Microsoft Excel; wenn Excel ausgeführt wird, wird es in die Tabelle ausgeführter Objekte eingetragen. Der erste Aufruf der GetObject-Funktion verursacht einen Fehler, wenn Microsoft Excel nicht bereits ausgeführt wird. In dem Beispiel wird durch den Fehler das Attribut ExcelLiefNicht auf True gesetzt. Der zweite Aufruf der GetObject-Funktion legt eine Datei fest, die geöffnet werden soll. Wenn Microsoft Excel noch nicht ausgeführt wird, wird es durch den zweiten Aufruf gestartet und gibt einen Verweis in Form einer angegebenen Datei TEST1.XLS an das Tabellenblatt zurück. Die Datei muß im angegebenen Verzeichnis existieren; andernfalls wird der Visual Basic-Fehler "Automatisierungsfehler" ausgelöst. Anschließend blendet der Beispiel-Code sowohl Microsoft Excel als auch das Fenster mit der angegebenen Tabelle ein. Schließlich wird, sofern vorher noch keine Version von Microsoft Excel ausgeführt wurde, die Quit-Methode des Application-Objekts verwendet, um Microsoft Excel zu beenden. Wenn die Anwendung bereits zuvor ausgeführt wurde, wird sie auch nicht beendet. Der Verweis selbst wird durch Setzen auf Nothing freigegeben.

' Deklarieren der nötigen API-Routinen:
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 XL1 As Object    ' Variable für Verweis auf
                            ' Microsoft Excel.
    Dim ExcelLiefNicht As Boolean    ' Attribut für Freigabe am Ende.
' Überprüfen, ob eine Kopie von Microsoft Excel bereits 
' ausgeführt wird.
On Error Resume Next    ' Fehlerbehandlung zurückstellen.
' GetObject-Funktionsaufruf ohne erstes Argument gibt einen Verweis auf 
' eine Instanz der Anwendung zurück. Wenn die Anwendung nicht
' ausgeführt wird, tritt ein Fehler auf.
    Set XL1 = Getobject(, "Excel.Application")
    If Err.Number <> 0 Then ExcelLiefNicht = True
    Err.Clear    ' Err-Objekt im Fehlerfall löschen.
' Prüfen auf Microsoft Excel. Wenn Microsoft Excel ausgeführt wird, wird
' dies in die Tabelle ausgeführter Objekte eingetragen.
    DetectExcel 
' Objektvariable so festlegen, daß sie auf die gewünschte Datei verweist.
    Set XL1 = Getobject("c:\vb4\TEST1.XLS")
' Microsoft Excel mit zugehöriger Application-Eigenschaft einblenden.
' Fenster mit der Datei unter Verwendung der Windows-Auflistung des
' XL1-Objektverweises anzeigen.
    XL1.Application.Visible = True
    XL1.Parent.Windows(1).Visible = True
' Dateiverarbeitung.
    ' ...
' Wenn diese Kopie von Microsoft Excel beim Starten des Beispiels 
' nicht ausgeführt wurde, wird Excel mit der Quit-Methode des
' Application-Objekts beendet. Wenn Sie versuchen, Microsoft Excel zu
' beenden, blinkt die Titelleiste, und Sie werden
' in einer Meldung gefragt, ob Sie geladene Dateien speichern möchten.
    If ExcelLiefNicht = True Then 
        XL1.Application.Quit
    End If
    Set XL1 = Nothing    ' Verweis auf Anwendung und
                            ' Tabelle freigeben.
End Sub
Sub DetectExcel()
' Diese Prozedur erkennt, ob Excel ausgeführt wird, und registriert dies.
    Const WM_USER = 1024
    Dim hWnd As Long
' Wenn Excel ausgeführt wird, wird durch Ausführen dieses 
' API-Aufrufs die zugehörige Zugriffsnummer zurückgegeben.
    hWnd = FindWindow("XLMAIN", 0)
    If hWnd = 0 Then    ' 0 bedeutet, daß Excel nicht ausgeführt wird.
        Exit Sub
    Else                
    ' Excel wird ausgeführt. Verwenden der API-Funktion
    ' SendMessage, um Excel in der Tabelle ausgeführter
    ' Objekte einzutragen.
        SendMessage hWnd, WM_USER + 18, 0, 0
    End If
End Sub