Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
760to764
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
760to764
760to764
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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

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
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

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige