Fensterprüfung in Excel VBA: So erkennst Du, ob ein Fenster existiert
Schritt-für-Schritt-Anleitung
Um zu überprüfen, ob ein Fenster in Excel VBA existiert, kannst Du die Funktion GetWindowInfo
verwenden. Hier ist eine Schritt-für-Schritt-Anleitung, wie Du den Code anpassen kannst, um eine msgBox
anzuzeigen, wenn das Fenster nicht geöffnet ist:
- Öffne Deine Excel-Anwendung und gehe zu „Entwicklertools“ > „Visual Basic“.
- Füge ein neues Modul hinzu, indem Du mit der rechten Maustaste auf „VBAProject“ klickst und „Einfügen“ > „Modul“ wählst.
- Kopiere den folgenden Code in das Modul:
Option Explicit
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal wIndx As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Const GW_HWNDFIRST = 0
Const GW_HWNDNEXT = 2
Const GW_CHILD = 5
Const WS_VISIBLE = &H10000000
Const WS_BORDER = &H800000
Const GWL_STYLE = (-16)
Function GetWindowInfo(ByVal hwnd&, STitel$, Optional booVisible As Boolean = True) As Long
Dim Result&, Style&, Title$
Style = GetWindowLong(hwnd, GWL_STYLE)
Style = Style And (WS_VISIBLE Or WS_BORDER)
Result = GetWindowTextLength(hwnd) + 1
Title = Space$(Result)
Result = GetWindowText(hwnd, Title, Result)
Title = Left$(Title, Len(Title) - 1)
If (Style = (WS_VISIBLE Or WS_BORDER)) Or booVisible = False Then
If Title Like "*" & STitel & "*" Then
GetWindowInfo = hwnd
Exit Function
End If
End If
GetWindowInfo = 0
End Function
Sub FensterSuchen()
Dim hwnd As Long
Dim STitel As String
STitel = "MeineFenstertitel"
hwnd = GetDesktopWindow()
hwnd = GetWindow(hwnd, GW_CHILD)
Dim windowExists As Boolean
windowExists = False
Do While hwnd <> 0
If GetWindowInfo(hwnd, STitel, True) = hwnd Then
ShowWindow hwnd, 1 ' maximieren
SetForegroundWindow hwnd ' aktivieren
windowExists = True
Exit Do
End If
hwnd = GetWindow(hwnd, GW_HWNDNEXT)
Loop
If Not windowExists Then
MsgBox "Bitte Programm öffnen"
End If
End Sub
- Ersetze
"MeineFenstertitel"
durch den Titel des Fensters, das Du überprüfen möchtest.
- Starte das Makro
FensterSuchen
, um zu sehen, ob das Fenster geöffnet ist.
Häufige Fehler und Lösungen
Alternative Methoden
Eine alternative Methode zur Überprüfung, ob ein Fenster existiert, ist die Verwendung der Funktion sucheFenster
, die ebenfalls im Thread erwähnt wird. Diese Funktion kann einfach in Deinen Code integriert werden:
Function sucheFenster(suchName As String, Optional ByVal teilSuche As Boolean = False, Optional ByVal grossKlein As Boolean = False) As Boolean
Dim hWnd As Long
Dim fensterTitel As String
If Not grossKlein Then suchName = LCase(suchName)
If teilSuche Then suchName = "*" & suchName & "*"
hWnd = GetWindow(GetWindow(GetDesktopWindow(), GW_CHILD), GW_HWNDFIRST)
Do
fensterTitel = GetWindowInfo(hWnd)
If Not grossKlein Then fensterTitel = LCase(fensterTitel)
If fensterTitel Like suchName Then
sucheFenster = True
Exit Function
End If
hWnd = GetWindow(hWnd, GW_HWNDNEXT)
Loop Until hWnd = 0
End Function
Du kannst diese Funktion in Deinem FensterSuchen
Makro verwenden, um die Fensterprüfung zu optimieren.
Praktische Beispiele
-
Fenster mit spezifischem Titel suchen:
Verwende die Funktion GetWindowInfo
und passe den Titel an, um spezifische Anwendungen zu überprüfen.
-
Teilweise Titelübereinstimmung:
Wenn Du nur Teile des Fenstertitels kennst, kannst Du die sucheFenster
Funktion nutzen, um eine Übereinstimmung zu finden.
Tipps für Profis
- Verwende
Option Explicit
: Dies stellt sicher, dass alle Variablen deklariert sind, was Fehler bei der Ausführung reduziert.
- Fehlerbehandlung einfügen: Um robustere Makros zu erstellen, füge Fehlerbehandlungsroutinen hinzu, um unerwartete Ausnahmen zu behandeln.
- Code modularisieren: Teile Deinen Code in kleinere, wiederverwendbare Funktionen auf, um die Lesbarkeit und Wartbarkeit zu verbessern.
FAQ: Häufige Fragen
1. Wie kann ich den Titel eines Fensters herausfinden?
Du kannst den Titel eines Fensters herausfinden, indem Du mit der Maus über das Fenster fährst oder das Fenster aktivierst und den Titel in der Titelleiste abliest.
2. Funktioniert dieser Code in Excel 2016?
Ja, dieser VBA-Code sollte in Excel 2016 und neueren Versionen problemlos funktionieren. Stelle sicher, dass die „Entwicklertools“ aktiviert sind.