fremde Instanzen

  • VB6

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Gast.

    fremde Instanzen

    Hallo Profis

    Ich bin mit folgendem Problem konfrontiert.
    Mit Windows – Kurztasten kann ich Systemweit eine VB-Eingabemaske aufrufen, welche Daten in einer Textdatei speichert. (Eingabemaske ist nach Fertigstellung als exe kompiliert.)

    Startet jemand Excel und öffnet Tabelle1.xls sucht VBA diese Textdatei und schreibt den Inhalt in die Tabelle.
    Das klappt recht gut.

    Jetzt aber folgende Situation:

    Die Excel- Tabelle1.xls IST bereits geöffnet.

    Rufe ich mit den Kurztasten die Eingabemaske auf, so sollten die Daten direkt in die geöffneteTabelle1.xls eingetragen werden.
    Die geöffnete Excel Tabelle ist aber eine bereits bestehende Instanz, welche der Eingabemaske unbekannt ist.

    Mit CreateObject("Excel.Application") klappt es ja, da eine neue Instanz gebildet wird.
    Das kann ich aber nicht verwenden, da der Anwender zuerst die Excel-Tabelle speichern u. schließen müsste um sie als neue Instanz zu öffnen.
    Meine Frage ist wie kann ich eine bestehende Instanz mit VB ansprechen?

    Danke für eure Hilfe
    Eugen
    :D

    Versuch mal die GetObject Funktion.

    Auszug aus MSDN:
    GetObject ([pathname] [, class])

    Ist pathname eine Null-Zeichenfolge (""), so gibt GetObject eine neue Instanz des Objekts vom angegebenen Typ zurück. Wird das Argument pathname nicht angegeben, so gibt GetObject ein momentan aktives Objekt vom angegebenen Typ zurück. Existiert kein Objekt vom angegebenen Typ, tritt ein Fehler auf.


    ' 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



    Viel Glück!