Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: externes Programm starten

externes Programm starten
kaleun
Hallo,
ich hab mal wieder eine Frage.
Ich starte aus Excel heraus ein externes Programm (z.B. Wordpad).
Das funktioniert über: Shell "c:\Programme\Windows NT\Accessories\wordpad.exe", vbNormalFocus
Nun soll aber beim starten des externen Programms zuerst abgefragt werden ob dieses schon läuft,
da ich nicht möchte das es mehrmals geöffnet wird.
Läuft das externe Programm schon, soll dorthin gewechselt werden.
Läuft es noch nicht soll es gestartet und dann dorthin gewechselt werden.
Habe schon dieverse Foren durchsucht, aber nichts passendes gefunden
Vielen Dank im voraus
Kaleun
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: externes Programm starten
17.06.2011 10:35:32
Martin
Hallo Kaleun,
so kannst so abfragen, ob WordPad bereits geöffnet ist:

Sub WordPad()
Dim objWMI As Object, objProc As Object
Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
Set objProc = objWMI.ExecQuery("Select * from Win32_Process " & "Where Name = 'wordpad.exe'")
If objProc.Count = 0 Then
MsgBox "WordPad ist nicht geöffnet"
Else
MsgBox "WordPad ist geöffnet"
End If
End Sub
Mit AppActivate kannst du den Focus auf ein anderes Windows-Fenster setzen, allerdings muss dir dazu der Fenstertitel bekannt sein. Sicherlich gibt es im Archiv auch einen Code der die Fenstertitel aller geöffneten Anwendungen auflistet. Du müsstest dann nur abfragen, ob die rechten 10 Zeichen " - WordPad" sind.
Viele Grüße
Martin
Anzeige
AW: externes Programm starten
17.06.2011 10:41:26
Martin
Hallo Kaleun,
also es geht auch ohne AppActivate. Mit folgendem Code wird auf WordPad gewechselt:
Viele Grüße
Martin
Option Explicit
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () 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
Private Declare Function GetWindowLong Lib "user32" Alias _
"GetWindowLongA" (ByVal hwnd As Long, ByVal wIndx As _
Long) As Long
Private Declare Function ShowWindow Lib "user32" ( _
ByVal hwnd As Long, _
ByVal nCmdShow As Long) As Long
Private Declare Function GetWindow Lib "user32" _
(ByVal hwnd As Long, ByVal wCmd As Long) As Long
Const GWL_STYLE& = (-16)
Const WS_VISIBLE = &H10000000
Const WS_BORDER = &H800000
Const GW_HWNDNEXT& = 2
Const GW_CHILD& = 5
Public OK As Boolean
Const iNormal& = 1
'Const iMinimized& = 2
'Const iMaximized& = 3
Sub Fokuswechsel_WordPad()
Fenster_aktivieren ("WordPad")
End Sub
Sub Fenster_aktivieren(FensterName)
Dim hwnd As Long
Dim STitel As String
STitel = FensterName 'hier einen Teil vom Fenster Titel angeben
hwnd = GetDesktopWindow()
hwnd = GetWindow(hwnd, GW_CHILD)
GetWindowInfo hwnd, STitel, False
Do While hwnd  0
hwnd = GetWindow(hwnd, GW_HWNDNEXT)
If GetWindowInfo(hwnd, STitel, False) = hwnd Then   ' False alle Fenster , true nur _
sichtbare Fenster
ShowWindow hwnd, iNormal&
SetForegroundWindow hwnd 'aktivieren
End If
Loop
End Sub
Private Function GetWindowInfo(ByVal hwnd&, STitel$, Optional booVisible As Boolean = True) As  _
Long
Dim Result&, Style&, Title$
'Darstellung des Fensters
Style = GetWindowLong(hwnd, GWL_STYLE)
Style = Style And (WS_VISIBLE Or WS_BORDER)
'Fensetrtitel ermitteln
Result = GetWindowTextLength(hwnd) + 1
Title = Space$(Result)
Result = GetWindowText(hwnd, Title, Result)
Title = Left$(Title, Len(Title) - 1)
'prüfen ob Fenster Sichtbar
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

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Externes Programm aus Excel starten und verwalten


Schritt-für-Schritt-Anleitung

Um ein externes Programm wie WordPad über ein Excel-Programm (VBA) zu starten und zu überprüfen, ob es bereits läuft, folge diesen Schritten:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (Dein Arbeitsblatt)" > Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:
Sub WordPad()
    Dim objWMI As Object, objProc As Object
    Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
    Set objProc = objWMI.ExecQuery("Select * from Win32_Process Where Name = 'wordpad.exe'")

    If objProc.Count = 0 Then
        MsgBox "WordPad ist nicht geöffnet"
        Shell "c:\Programme\Windows NT\Accessories\wordpad.exe", vbNormalFocus
    Else
        MsgBox "WordPad ist geöffnet"
        AppActivate "WordPad"
    End If
End Sub
  1. Schließe den VBA-Editor und kehre zu Excel zurück.
  2. Führe das Makro aus: Entwicklertools > Makros > Wähle WordPad > Ausführen.

Dieser Code überprüft, ob WordPad bereits geöffnet ist, und startet es, falls es nicht läuft. Wenn es bereits geöffnet ist, wird der Fokus auf das Fenster gesetzt.


Häufige Fehler und Lösungen

  • Fehler: "WordPad ist nicht geöffnet" wird immer angezeigt.
    Lösung: Stelle sicher, dass der Name des Prozesses korrekt ist. Dies sollte "wordpad.exe" sein.

  • Fehler: AppActivate funktioniert nicht.
    Lösung: Überprüfe, ob der Fenstertitel von WordPad korrekt angegeben ist. Du kannst den Titel auch anpassen, indem du die letzten 10 Zeichen abgleichst.


Alternative Methoden

Eine andere Möglichkeit, ein externes Programm zu starten, ist die Verwendung von API-Funktionen, um den Fokus auf das Fenster zu setzen. Hier ist ein Beispiel:

Option Explicit
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long

Sub Fokuswechsel_WordPad()
    Fenster_aktivieren ("WordPad")
End Sub

Sub Fenster_aktivieren(FensterName)
    ' Der restliche Code bleibt gleich
End Sub

Diese Methode ermöglicht dir, den Fokus auf das WordPad-Fenster zu setzen, ohne AppActivate verwenden zu müssen.


Praktische Beispiele

Hier ist ein Beispiel, wie du eine Tabelle in WordPad einfügen kannst. Du kannst Daten aus deiner Excel-Tabelle kopieren und in WordPad einfügen:

  1. Wähle die Zellen in Excel, die du kopieren möchtest.
  2. Drücke CTRL + C, um die Zellen zu kopieren.
  3. Öffne WordPad (mit dem obigen Makro).
  4. Drücke CTRL + V, um die Tabelle in WordPad einzufügen.

Tipps für Profis

  • Experimentiere mit verschiedenen externen Programmen, indem du den Pfad in der Shell-Anweisung anpasst.
  • Du kannst auch die Funktionen GetObject und CreateObject verwenden, um andere Anwendungen wie Outlook oder Word zu steuern.
  • Nutze Error Handling in deinem VBA-Code, um potenzielle Fehler abzufangen und die Benutzerfreundlichkeit zu verbessern.

FAQ: Häufige Fragen

1. Was ist Excel für ein Programm?
Excel ist ein Tabellenkalkulationsprogramm von Microsoft, das zur Datenanalyse, -visualisierung und -verwaltung verwendet wird.

2. Wie kann ich eine Tabelle in WordPad einfügen?
Du kannst Daten aus Excel kopieren und in WordPad einfügen, indem du die gewünschten Zellen auswählst, kopierst und dann in das WordPad-Dokument einfügst.

3. Was kann ich tun, wenn der Code nicht funktioniert?
Überprüfe die Pfade und Namen der Programme. Stelle sicher, dass die Makros in den Excel-Optionen aktiviert sind und dass du die richtigen Berechtigungen hast.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige