Microsoft Excel

Herbers Excel/VBA-Archiv

Name der aktiven Anwendung

Betrifft: Name der aktiven Anwendung von: Jürgen K.
Geschrieben am: 10.08.2007 12:02:40

Hallo Excel Gemeinde.

In einem Makro wechsle ich von Excel zu SAP um dort Eingaben machen zu können.
Diese Eingaben dürfen aber erst gemacht werden, wenn eine bestimmte Transaktion aufgerufen wurde und aktiv ist. Der Name dieser Transaktion, bzw. der dann aktiven Anwendung wird auch angezeigt (z. B. "Konfiguration : Ergebnis").

Ich benötige also einen Code, der mir den Namen der aktiven Anwendung ausliest. Ist sicherlich ganz einfach, aber alle meine bisherigen Versuche lieferten mir immer nur "Microsoft Excel" als Ergebnis zurück
auch wenn schon zu SAP gewechselt wurde.

Das Makro soll dann weiterlaufen, wenn das aktive Fenster z. B. "Konfiguration : Ergebnis" heißt.

Wer kann mir einen Tipp geben, wie ich das bewerkstelligen kann.

Viele Grüße und besten Dank im voraus, Jürgen.

  

Betrifft: AW: Name der aktiven Anwendung von: Nepumuk
Geschrieben am: 10.08.2007 19:39:09

Hallo Jürgen,

ich weiß ja nicht, wie du es versuchst, aber ich würde es so machen:

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function GetForegroundWindow Lib "user32.dll" () As Long
Private Declare Function GetWindowTextLength Lib "user32.dll" Alias "GetWindowTextLengthA" ( _
    ByVal hWnd As Long) As Long
Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" ( _
    ByVal hWnd As Long, _
    ByVal lpString As String, _
    ByVal cch As Long) As Long
Private Declare Sub Sleep Lib "kernel32.dll" ( _
    ByVal dwMilliseconds As Long)

Public Sub test()
    Do
        Sleep 1000
        DoEvents
        If GetWindowTitle(GetActiveWindow) = "Konfiguration : Ergebnis" Then Exit Do
    Loop
    Beep
End Sub

Private Function GetWindowTitle(ByVal hWnd As Long) As String
    Dim lngReturn As Long, strTemp As String
    lngReturn = GetWindowTextLength(hWnd) + 1
    strTemp = Space(lngReturn)
    lngReturn = GetWindowText(hWnd, strTemp, lngReturn)
    GetWindowTitle = Left(strTemp, Len(strTemp) - 1)
    Debug.Print GetWindowTitle
End Function

Gruß
Nepumuk


  

Betrifft: AW: Name der aktiven Anwendung von: Herby
Geschrieben am: 10.08.2007 22:04:10

Hallo Nepumuk,

ich hab so meine Probleme mit Deinem Code. Zuerst wird angemeckert, dass GetActiveWindow nicht als Variable vorhanden ist.
Nach dem ich sie mit
Private Declare Function GetActiveWindow Lib "user32.dll" () As Long
definiert habe (hoffentlich richtig), funktionierts meiner Meinung nach immer noch nicht. Ich rufe das Makro auf, wechsle dann zu einer anderen Anwendung, z.B. nach "Dokument1 - Microsoft Word" und warte dort auf eine Info. - Vergebens ! auch wenn ich wieder nach Excel zurückkehre das gleiche !
Kannst Du mir sagen, was ich am Code ändern muß, damit ich irgendwie/irgendwann ein vernünftiges Feedback kriege ? Oder habe ich das Ganze falsch verstanden ?

Die Zeile
If GetWindowTitle(GetActiveWindow) = "Dokument1 - Microsoft Word" Then
habe ich entsprechend abgeändert.

An dieser Stelle ein kräftiges Danke!!!!! für Deine - für mich immer wertvollen Infos !

Viele Grüße
Herby


  

Betrifft: AW: Name der aktiven Anwendung von: Nepumuk
Geschrieben am: 10.08.2007 22:12:24

Hallo Herby,

oben korrigiert, aber unten vergessen. So geht's:

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function GetForegroundWindow Lib "user32.dll" () As Long
Private Declare Function GetWindowTextLength Lib "user32.dll" Alias "GetWindowTextLengthA" ( _
    ByVal hWnd As Long) As Long
Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" ( _
    ByVal hWnd As Long, _
    ByVal lpString As String, _
    ByVal cch As Long) As Long
Private Declare Sub Sleep Lib "kernel32.dll" ( _
    ByVal dwMilliseconds As Long)

Public Sub test()
    Do
        Sleep 1000
        DoEvents
        If GetWindowTitle(GetForegroundWindow) = "Eigene Dateien" Then Exit Do
    Loop
    Beep
End Sub

Private Function GetWindowTitle(ByVal hWnd As Long) As String
    Dim lngReturn As Long, strTemp As String
    lngReturn = GetWindowTextLength(hWnd) + 1
    strTemp = Space(lngReturn)
    lngReturn = GetWindowText(hWnd, strTemp, lngReturn)
    GetWindowTitle = Left(strTemp, Len(strTemp) - 1)
    Debug.Print GetWindowTitle
End Function

Gruß
Nepumuk


  

Betrifft: Danke - funktioniert super ! von: Herby
Geschrieben am: 11.08.2007 14:18:07

Hallo Nepumuk,

ich hab noch mit dem Code ein bischen rumprobiert und festgestellt, dass er bei mir super funktioniert.
Danke nochmals !

Viele Grüße
Herby



 

Beiträge aus den Excel-Beispielen zum Thema "Name der aktiven Anwendung"