VBA-Spezialthema "Starten von Excel/von Programmen"
Allgemeines über das Starten von Excel und anderen Programmen
Übersicht der verschiedenen Start-Methoden
Beschreibung der Start-Methoden
VBA-Funktion
"Shell"
Excel VBA-Anweisung
"ActivateMicrosoftApp"
API-Funktion
"ShellExecute"
API-Funktion
"CreateProcess"
VBA-Funktion
"CreateObject"
WSH-Methode
"Run"
Diese Seite ist in Bearbeitung! |
Allgemeines über das Starten von Excel und anderen Programmen
Was meinen Sie: Wie viele Möglichkeiten gibt es zum Starten eines Programmes aus einem VBA-Programm heraus?
Nun, wenn Sie an die verschiedenen Befehle und Funktionen von VBA denken, kommt Ihnen vermutlich Shell, CreateObject, vielleicht eine API-Funktion und eventuell noch das wenig bekannte ActivateMicrosoftApp (nur in Microsoft Excel vorhanden) in den Sinn. Das wären somit vier verschiedene Varianten. Tatsächlich existieren jedoch mindestens 12 verschiedene Möglichkeiten, wie ein Programm mit VBA gestartet werden kann! Die meisten dieser Möglichkeiten sind sich sehr ähnlich. Dennoch gibt es ein paar wichtige Unterschiede, die Sie kennen sollten.
Auf dieser Seite werden diese 12 Methoden vorgestellt, die
Unterschiede zwischen den verschiedenen Methoden erklärt und Empfehlungen abgegeben, in
welcher Situation welche Variante die beste ist. Anhand von VBA-Codebeispielen wird
gezeigt, wie die Methoden in der Praxis verwendet werden. Zudem erhalten Sie Antworten auf
diese und viele weitere Fragen:
- Wie startet man eine Anwendung, wenn man den Pfad ihrer exe-Datei nicht kennt?
- Wie findet man heraus, ob eine Anwendung bereits läuft oder noch gestartet
werden muss?
- Wie startet man die mit einer Dokumentdatei verknüpfte Anwendung?
- Wie erfährt man, ob der Startvorgang der anderen Anwendung abgeschlossen, d.h.
die Anwendung bereit ist?
- Wie erreicht man, dass das VBA-Makro so lange wartet, bis die zuvor gestartete
Anwendung beendet ist?
- Wie erhält man den Fenster-Handle des Anwendungsfensters der gestarteten
Anwendung?
- Wie lässt sich die Prozess-ID der gestarteten Anwendung ermitteln?
Übersicht der verschiedenen Start-Methoden
Diese Tabelle zeigt eine Übersicht der verschiedenen Möglichkeiten zum Starten eines Programmes:
| Nr. | Anweisung/Methode | Technik | Startmodus | Beschreibung |
| 1 | Shell | VBA | Asynchron | Startet ein Programm asynchron oder aktiviert ein laufendes Single Use-Programm. |
| 2 | ActivateMicrosoftApp | Excel-VBA | Synchron | Startet eine Microsoft-Anwendung synchron oder aktiviert eine bereits laufende Anwendung. Nur in Microsoft Excel (97, 2000, 2002 und 2003) verfügbar; in anderen Office-Programmen nicht vorhanden. |
| 3 | ShellExecute | API | Synchron | Startet ein Programm synchron. |
| 4 | CreateProcess | API | Synchron | Führt ein Programm synchron aus, indem ein Prozess gestartet wird. |
| 5 | CreateObject | Office Automation | Synchron | Führt ein Programm synchron aus, indem das Applikationsobjekt instanziert wird. |
| 6 | GetObject | Office Automation | Synchron | Führt ein Programm synchron aus, indem ein Objekt der Applikation instanziert wird, wodurch die Applikation gestartet wird. |
| 7 | Dim As New | Office Automation | Synchron | Führt ein Programm synchron aus, indem das Applikationsobjekt instanziert wird. |
| 8 | Set = New | Office Automation | Synchron | Führt ein Programm synchron aus, indem das Applikationsobjekt instanziert wird. |
| 9 | DDEInitiate | DDE | Asynchron | Startet ein Programm asynchron durch Aufbauen einer DDE-Verbindung. |
| 10 | OLE Object | - | Synchron | - |
| 11 | Run | Shell Controls | Synchron | Shell Controls |
| 12 | Run | Windows Script Host | Synchron | Startet ein Programm synchron und wartet bei Bedarf auf seine Beendigung. |
Begriffserklärungen
Microsoft Anwendung
Application |
Application Type |
|---|---|
| Access | Single-Use |
| Excel | Single-Use |
| FrontPage | Single-Use |
| Outlook | Multi-Use |
| PowerPoint | Multi-Use |
| Word | Single-Use |
Beschreibung der Start-Methoden
| VBA (alle Office-Programme), VB |
Die bekannteste Methode, eine ausführbare Datei zu starten, ist die Verwendung der Shell-Funktion von VBA.
Sub ExecuteProgram()
x = Shell("Notepad.exe, vbNormalFocus)
End Sub
Sub ExecuteProgram()
Shell "Notepad.exe", vbNormalFocus
End Sub
Excel VBA-Anweisung "ActivateMicrosoftApp"
| VBA (nur Excel) |
Das Objektmodell von Microsoft Excel enthält eine spezielle Methode, mit der man ein anderes Microsoft Office-Programm ausführen kann.
Sub ExecuteProgram()
Application.ActivateMicrosoftApp xlMicrosoftWord
End Sub
| VBA (alle Office-Programme), VB |
| VBA (alle Office-Programme), VB |
| VBA (alle Office-Programme), VB |
| VBA (alle Office-Programme), VB |
Sub ExecuteProgram()
Dim intKanal As Integer
intKanal = DDEInitiate("Excel", "System")
MsgBox intKanal
DDETerminate intKanal
End Sub
| VBA (alle Office-Programme), VB |
Das Shell-Objekt aus der Windows Script Host-Bibliothek (WSH, wshom.ocx) besitzt eine Methode namens Run, die zum Starten von Programmen benutzt wird. Der Vorteil von Run ist, dass im Gegensatz zu Shell von VBA auch ein Programm gestartet werden kann, ohne dass der Pfad zu ihrer exe-Datei angegeben bzw. bekannt sein muss.
Sub ExecuteProgram()
CreateObject("WScript.Shell").Run "FontShow.exe"
End Sub
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\FontShow.exe

Abbildung: Laufzeitfehler -2147024894
Sub WaitForProgram()
Dim lngRC As Long
lngRC = CreateObject("WScript.Shell").Run("ACDSee.exe",
, True) 'True für Warten
'Bei lngRC = 0 wurde Anwendung/Task normal beendet
'Bei lngRC = 1 wurde Prozess der Anwendung/Task abgeschossen (Task-Manager,
Prozesse)
MsgBox "Jetzt geht's weiter... " & lngRC
End Sub
Wie startet man eine Anwendung, wenn man den Pfad ihrer exe-Datei nicht kennt?
Sub ExecuteProgram()
CreateObject("WScript.Shell").Run "FontShow.exe"
End Sub
Wie findet man heraus, ob eine Anwendung bereits läuft oder noch gestartet werden muss?
Wie startet man die mit einer Dokumentdatei verknüpfte Anwendung?
Mit der API-Funktion ShellExecute
Argumente:
| Argument | Beschreibung |
| hwnd | Window Handle (immer 0&) |
| lpOperation | DDE Command |
| lpFile | Pfad- und Dateiname |
| lpParameters | Befehlszeilen-Parameter |
| lpDirectory | Arbeitsverzeichnis |
| nShowCmd | Fensterstil |
'Deklarationsbereich
ODER
'Codemodul
Sub OpenFileWithAssociatedProgram3()
ActiveWorkbook.FollowHyperlink "C:\Daten\Bild.gif"
End Sub
Wie erfährt man, ob der Startvorgang der anderen Anwendung abgeschlossen, d.h. die Anwendung bereit ist?
Wie erreicht man, dass das VBA-Makro so lange wartet, bis die zuvor gestartete Anwendung beendet ist?
Sub ExecuteProgram()
CreateObject("WScript.Shell").Run "FontShow.exe", , True
End Sub
Wie erhält man den Fenster-Handle des Anwendungsfensters der gestarteten Anwendung?
Wie lässt sich die Prozess-ID der gestarteten Anwendung ermitteln?
x = Shell("Notepad.exe")
Wie findet man heraus, ob die gestartete Anwendung normal beendet oder abgeschossen wurde?
Dim lngRetCode As Long
lngRetCode = CreateObject("WScript.Shell").Run("Notepad.exe", , True)
'True für Warten
'Bei lngRetCode=0 wurde Anwendung/Task normal beendet
'Bei lngRetCode=1 wurde Prozess der Anwendung/Task abgeschossen (Task Manager, Prozess)
Wie kann man beim Starten die Prozess-Priorität festlegen?
Wie kann man in Excel einen Excel-Neustart durchführen?
Private Sub cmdRestart_Click()
Dim wkbBook As Workbook
Dim strExcel As String
strExcel = "D:\Programme\Microsoft Office\Office\excel.exe"
For Each wkbBook In Application.Workbooks
If LCase$(wkbBook.Name) = "personl.xls" Then
wkbBook.Close True
End If
Next
ThisWorkbook.Save
ThisWorkbook.ChangeFileAccess xlReadOnly
If Application.WindowState = xlMaximized Then
Shell Chr$(34) & strExcel & Chr$(34) & " " &
Chr$(34) & ThisWorkbook.FullName & Chr$(34), vbMaximizedFocus
Else
Shell Chr$(34) & strExcel & Chr$(34) & " " &
Chr$(34) & ThisWorkbook.FullName & Chr$(34), vbNormalFocus
End If
Application.Quit
End Sub
Weitere Informationen |
|
|
Zuletzt aktualisiert am
5.05.2005 / 23:30 Uhr
© 2002-2005 by Philipp von Wartburg, CH-8916 Jonen
Alle Rechte vorbehalten