ich möchte gern per VBA die Namen der offenen Anwendungen auslesen und einer Variablen übergeben,
die ich dann im Code weiterverarbeiten kann.
z.B. Inbox - Microsoft Outlook, Kalender - Microsoft Outlook...
Danke für Hinweise.
M.f.G.
Lutz
Um die Namen der offenen Anwendungen in Excel per VBA auszulesen, kannst du die Windows-API verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:
VBA-Editor öffnen: Drücke ALT + F11
, um den VBA-Editor zu öffnen.
Modul einfügen: Klicke mit der rechten Maustaste auf "VBAProject (DeineArbeitsmappe)", wähle "Einfügen" und dann "Modul".
Code einfügen: Kopiere den folgenden Code in das Modul:
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Dim appName As String
Sub GetOpenApplications()
appName = ""
EnumWindows AddressOf EnumProc, 0
MsgBox appName
End Sub
Function EnumProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim title As String * 255
GetWindowText hwnd, title, 255
If title <> vbNullString Then
appName = appName & title & vbCrLf
End If
EnumProc = 1
End Function
Makro ausführen: Drücke F5
, um das Makro GetOpenApplications
auszuführen. Es wird ein Fenster angezeigt, das die Namen der offenen Anwendungen auflistet.
Fehler: "Benutzerdefinierte Funktion nicht definiert"
Fehler: Keine Anwendung wird angezeigt
Wenn du keine API verwenden möchtest, kannst du auch alternative Ansätze in Betracht ziehen, wie z.B. die Verwendung von PowerShell oder externen Tools, die die Fensterliste auslesen und die Informationen an Excel zurückgeben.
Ein Beispiel für PowerShell:
Get-Process | Where-Object { $_.MainWindowTitle } | Select-Object MainWindowTitle
Anwendungen in einer Liste speichern: Anstatt die Namen der Anwendungen nur anzuzeigen, kannst du sie auch in eine Excel-Tabelle schreiben.
Sub SaveApplicationsToSheet()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(1)
Dim row As Integer
row = 1
appName = ""
EnumWindows AddressOf EnumProc, 0
Dim appArray() As String
appArray = Split(appName, vbCrLf)
For Each app In appArray
If app <> "" Then
ws.Cells(row, 1).Value = app
row = row + 1
End If
Next app
End Sub
Anwendungen filtern: Du kannst den Code erweitern, um nur spezifische Anwendungen zu erfassen, z.B. nur Microsoft Outlook.
Debug.Print appName
, um die Ergebnisse im Direktfenster zu sehen, anstatt sie in einer MsgBox anzuzeigen.1. Kann ich den Code anpassen, um auch minimierte Fenster zu sehen?
Ja, du kannst die API-Funktion IsWindowVisible
verwenden, um auch minimierte Fenster anzuzeigen.
2. Funktioniert dieser Code in Excel 365? Ja, dieser Code funktioniert in Excel 365 und anderen Versionen, die VBA unterstützen. Stelle sicher, dass die Makros aktiviert sind.
Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden
Suche nach den besten AntwortenEntdecke unsere meistgeklickten Beiträge in der Google Suche
Top 100 Threads jetzt ansehen