Office Logo VBA  Zurück zur Hauptseite

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"

       Fragen und Antworten

       Zur Hauptseite

To Top

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?

To Top

 


Ü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

Asynchron

Synchron

Single-Use

Multi-Use

Microsoft Anwendung

 

Application

Application Type

Access Single-Use
Excel Single-Use
FrontPage Single-Use
Outlook Multi-Use
PowerPoint Multi-Use
Word Single-Use

To Top

 


Beschreibung der Start-Methoden

VBA-Funktion "Shell"

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

 

To Top


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

 

To Top


API-Funktion "ShellExecute"

VBA (alle Office-Programme), VB

 

To Top


API-Funktion "CreateProcess"

VBA (alle Office-Programme), VB

 

To Top


VBA-Funktion "CreateObject"

VBA (alle Office-Programme), VB

 

To Top


VBA-Funktion "DDEInitiate"

VBA (alle Office-Programme), VB

 

Sub ExecuteProgram()
  Dim intKanal As Integer
  intKanal = DDEInitiate("Excel", "System")
  MsgBox intKanal
  DDETerminate intKanal
End Sub

 

To Top


WSH-Methode "Run"

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

 

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

To Top

 


Fragen und Antworten

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
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
  (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As _
  String, ByVal lpParameters As String, ByVal lpDirectory As String, _
  ByVal nShowCmd As Long) As Long

'Codemodul
Sub OpenFileWithAssociatedProgram1()
  ShellExecute 0&, "open", "C:\EineDatei.pdf", vbNullString, vbNullString, vbNormalFocus
End Sub

 

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

Fragen und Antworten: Kann man über eine Schaltfläche einen Excel Restart auslösen?

To Top

Haben Sie Fragen, Anregungen oder Hinweise?
Mail senden an philipp.von.wartburg@bluewin.ch

Zuletzt aktualisiert am 5.05.2005 / 23:30 Uhr
© 2002-2005 by Philipp von Wartburg, CH-8916 Jonen
Alle Rechte vorbehalten