Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Externes Programm aktivieren

Externes Programm aktivieren
11.05.2006 05:05:08
Xelleron(Dennis)
Guten Morgen zusammen,
ich habe folgenden Code zum Starten eines Externen Programm gefunden:

Private Sub CommandButton1_Click()
On Error GoTo zError
Dim xxx As Long
Application.SendKeys "{EINGABE}", True
xxx = Shell("?.exe", vbMaximizedFocus)
Application.SendKeys ("%F"), True
Application.SendKeys ("%1"), True
Exit Sub
zError:
MsgBox "Fehler!", , "Datei öffnen"
End Sub

Jetzt ist es aber so, daß das Prog. jedesmal geöffnet wird. Wie kann ich das Programm aber nur aktivieren, wenn es schon geöffnet ist, bzw wie kann ich das vorher prüfen?
Gruss Dennis
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Externes Programm aktivieren
11.05.2006 12:07:55
ctr01
Hallo Dennis,
ich habe es so hinbekommen :

Sub Test_Fremdprogramm_Shell()
Dim Doku As String
Doku = "C:\EigeneDateien\privateDokumente\Testdoku.doc"
On Error GoTo Errorhandler
AppActivate "Microsoft Word"
Documents.Open FileName:=Doku
Exit Sub
Errorhandler:
Shell "C:\Programme\Microsoft Office\Office\winword.EXE " & Doku, 3
On Error GoTo 0
Exit Sub
End Sub

Gruß
Norbert
Anzeige
AW: Externes Programm aktivieren
11.05.2006 21:56:54
Xelleron(Dennis)
Hallo Norbert,
danke für den Ansatz:
Bei mir funzt es nur so:

Sub Test_Fremdprogramm_Shell()
Dim Doku As String
Doku = "C:\EigeneDateien\privateDokumente\Testdoku.doc"
AppActivate "Microsoft Word"
Documents.Open FileName:=Doku
Exit Sub
End Sub

Jetzt habe ich noch eine Frage:
In dem Programm kann ich eine Bestandsliste als *.txt Datei speichern,d ie ich dann in *.xls wandle etc.
mit
Application.SendKeys = ("%FV") & ("% bestand.txt"), True
will ich nun die Liste speichern.
Das Speichern-Menü und den Text schreibt er, wie schaffe ich es nun aber, daß es auch gespeichert wird? Bei meiner Variante schließt sich der Dialog lediglich ohne Speichern.
Gruss Dennis
Anzeige
AW: Externes Programm aktivieren
15.05.2006 22:58:48
Bernd
Hi,
SendKeys sollte immer das allerletzte Mittel sein, ist zu unsicher.
mfg Bernd
AW: Externes Programm aktivieren
11.05.2006 14:05:15
Heiko
Hallo Dennis,
mal als Ansatz wenn du das Programm vorher auch selbst über Shell gestartet hast.
Option Explicit
Private Declare Function GetWindowThreadProcessId Lib "user32" _
(ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function SetForegroundWindow Lib "user32" ( _
ByVal hwnd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, ByVal _
lpWindowName As String) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As _
Long, ByVal wCmd As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As _
Long) As Long
Private Const GW_HWNDNEXT As Long = 2&
Private Retval As Long
Private lngShellHandle As Long

Private Function ShellTohWnd(ByVal hhwPfad As String, Optional Mode As VbAppWinStyle)
Dim ProcHWND As Long, ProcHWN As Long
ProcHWND = Shell(hhwPfad, Mode)
Retval = FindWindow(vbNullString, vbNullString)
Do While Retval <> 0
If GetParent(Retval) = 0 Then
Call GetWindowThreadProcessId(Retval, ProcHWN)
If ProcHWN = ProcHWND Then
ShellTohWnd = Retval
Exit Do
End If
End If
Retval = GetWindow(Retval, GW_HWNDNEXT)
Loop
End Function

' Testaufruf
Sub FensterHandleI()
If SetForegroundWindow(lngShellHandle) = 0 Then
lngShellHandle = ShellTohWnd("c:\windows\notepad.exe", vbNormalFocus)
MsgBox lngShellHandle
End If
End Sub
' oder so.
' Aber wenn ein zweites Fenster damit GLEICHZEITIG gehandelt werden soll muss auch eine zweite
' Variable lngShellHandle angelegt werden, sonst geht es natürlich nicht.
Sub FensterHandleII()
If SetForegroundWindow(lngShellHandle) = 0 Then
lngShellHandle = ShellTohWnd("c:\windows\system32\freecell.exe", vbNormalFocus)
MsgBox lngShellHandle
End If
End Sub
Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Externes Programm aktivieren in Excel mit VBA


Schritt-für-Schritt-Anleitung

Um ein externes Programm mit VBA zu aktivieren, kannst du den folgenden Code verwenden. Dieser nutzt die AppActivate-Funktion, um das Programm zu aktivieren, wenn es bereits geöffnet ist:

Sub Test_Fremdprogramm_Shell()
    Dim Doku As String
    Doku = "C:\EigeneDateien\privateDokumente\Testdoku.doc"
    On Error GoTo Errorhandler
    AppActivate "Microsoft Word"
    Documents.Open FileName:=Doku
    Exit Sub
Errorhandler:
    Shell "C:\Programme\Microsoft Office\Office\winword.EXE " & Doku, 3
    On Error GoTo 0
    Exit Sub
End Sub
  1. Füge diesen Code in ein VBA-Modul ein.
  2. Ersetze den Pfad zur Datei und den Namen des Programms nach deinen Bedürfnissen.
  3. Starte das Makro, um das Programm zu aktivieren.

Häufige Fehler und Lösungen

  • Fehler: "Das Programm konnte nicht gefunden werden."

    • Stelle sicher, dass der Programmname in AppActivate korrekt ist. Prüfe, ob das Programm tatsächlich geöffnet ist.
  • Fehler: "Fehler beim Öffnen der Datei."

    • Überprüfe den Dateipfad und stelle sicher, dass die Datei vorhanden ist.
  • Fehler: "SendKeys funktioniert nicht wie erwartet."

    • SendKeys ist oft unzuverlässig und sollte nur als letzte Option verwendet werden. Versuche, das Programm direkt über die API-Funktionen zu steuern.

Alternative Methoden

Wenn du eine alternative Methode benötigst, um ein externes Programm zu starten oder zu aktivieren, kannst du auch die Shell-Funktion verwenden. Hier ist ein Beispiel:

Sub StartExternesProgramm()
    Dim progPath As String
    progPath = "C:\Programme\MeinProgramm.exe"
    Shell progPath, vbNormalFocus
End Sub

Diese Methode eignet sich, um das Programm zu starten, wenn es nicht bereits geöffnet ist.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie du die AppActivate-Funktion in Kombination mit Shell nutzen kannst:

  1. Aktivieren von Notepad:
Sub NotepadAktivieren()
    On Error Resume Next
    AppActivate "Notepad"
    If Err.Number <> 0 Then
        Shell "notepad.exe", vbNormalFocus
    End If
End Sub
  1. Öffnen einer Excel-Datei und Aktivieren von Excel:
Sub ExcelDateiOeffnen()
    Dim excelPath As String
    excelPath = "C:\Dokumente\Beispiel.xlsx"
    AppActivate "Microsoft Excel"
    Workbooks.Open excelPath
End Sub

Tipps für Profis

  • Verwende AppActivate nur, wenn du sicher bist, dass das Programm geöffnet ist.
  • Teste deine VBA-Programme regelmäßig, um sicherzustellen, dass sie wie gewünscht funktionieren.
  • Nutze die On Error-Anweisung, um Fehler abzufangen und Benutzerfreundlichkeit zu verbessern.

FAQ: Häufige Fragen

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

2. Wie kann ich ein VBA Programm starten?
Du kannst ein VBA Programm starten, indem du es in einem VBA-Modul schreibst und über das Excel-Makro-Menü ausführst.

3. Warum sollte ich SendKeys vermeiden?
SendKeys ist unzuverlässig, da es von der Benutzeroberfläche abhängt und in bestimmten Situationen nicht wie erwartet funktionieren kann.

4. Gibt es eine Möglichkeit, mehrere Fenster mit AppActivate zu steuern?
Ja, du kannst mehrere lngShellHandle-Variablen anlegen, um verschiedene Fenster gleichzeitig zu steuern.

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