Excel VBA warten bis Excel wieder aktiv ist

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Excel VBA warten bis Excel wieder aktiv ist
von: pongobernd
Geschrieben am: 05.05.2015 11:22:49

Servus,
mit VBA aktiviere ich ein Programm und sende einen Befehl (ist wo anders definiert).
Jetzt soll der Code in Excel warten bis Excel wieder aktiviert wird, damit ich im anderen Programm kontrollieren ung ggf. etwas ändern kann.
Derzeit habe ich eine Pause von ein paar Sekunden eingebaut, aber ich würde es gerne etwas dynamischer gestalten, so das wenn Excel wieder aktiviert wird es mit dem Code weiter geht.
Pause Counter Schleifen sind in Zellen definiert
Code:


Sub Schleife_time()
        Application.Goto Reference:="Counter"
        For i = [Counter] + 1 To [Counter] + [Schleifen]
            Application.Goto Reference:="Counter"
            ActiveCell = i
            Application.Wait (Now + [Pause] / 86400)hier soll gewartet werden bis Excel  _
wieder  aktiv ist
        Next i
    End Sub

Bild

Betrifft: AW: Excel VBA warten bis Excel wieder aktiv ist
von: EtoPHG
Geschrieben am: 05.05.2015 12:05:35
Hallo Bernd,
Das ist mit Basis-Kenntnissen 'heavy fuel'...
Du kannst das nur über API-Funktionen lösen.
Stichworte dazu (benutze die Recherche des Forums) sind:

  • Window-Handle beim Start eines Programms merken,
  • Zyklisch über EnumWindows-Function den Zustand des gemerkten Handle prüfen

  • Gruess Hansueli

    Bild

    Betrifft: Auf Ende von anderem Programm warten...
    von: EtoPHG
    Geschrieben am: 05.05.2015 12:09:03
    Hallo Bernd,
    Zur weiteren Information:
    Excel kann nicht warten, bis Excel wieder aktiv ist.
    Das ist ein Widerspruch in sich, den während dem Warten, ist Excel aktiv (nämlich mit Warten) und muss von Aussen eine Information erhalten, wann es weitergeht. Also müsste es heissen:
    EXCEL wartet auf die Beendigung eines anderen Programms.
    Gruess Hansueli

    Bild

    Betrifft: AW: Excel VBA warten bis Excel wieder aktiv ist
    von: Nepumuk
    Geschrieben am: 05.05.2015 12:33:35
    Hallo,
    teste mal:

    Option Explicit

    Declare PtrSafe Sub Sleep Lib "kernel32.dll" ( _
        ByVal dwMilliseconds As Long)
    Declare PtrSafe Function GetActiveWindow Lib "user32.dll" () As LongPtr

    Public Sub Test()
        Do
            Call Sleep(100)
            DoEvents
            If CLngPtr(Application.Hwnd) = GetActiveWindow Then Exit Do
        Loop
        MsgBox "Weiter geht's"
    End Sub


    Gruß
    Nepumuk

     Bild

    Beiträge aus den Excel-Beispielen zum Thema "Excel VBA warten bis Excel wieder aktiv ist"