The eXpLorer


Die geheimen Parameterwerte von ActivateMicrosoftApp

ActivateMicrosoftApp

Möchte man in Excel-VBA eine andere Office-Anwendung starten, bedient man sich häufig der Shell-Funktion von VBA. Damit die Anwendung jedoch gestartet werden kann, muss der Shell-Funktion der genaue Pfad der ausführbaren Datei (.exe) mitgegeben werden. Solange die zu startende Anwendung aus der gleichen Office-Version wie Excel stammt, könnte man behelfsmässig den Pfad von Excel verwenden (d.h. Application.Path) und voraussetzen, dass die exe-Datei der anderen Anwendung im gleichen Verzeichnis wie Excel.exe steht. Sobald es sich um eine Anwendung einer anderen Office-Version handelt, weicht der Programmpfad sehr wahrscheinlich ab. Damit nicht ein (eher schwierig zu programmierender) Zugriff auf die Windows Registry vorgenommen werden muss, um den Pfad der gesuchten Anwendung herauszufinden, stellt Excel eine spezielle Methode zum Starten von Office-Anwendungen bereit: Die ActivateMicrosoftApp-Methode.

Der wohl grösste Vorteil von ActivateMicrosoftApp ist - verglichen mit der Shell-Funktion - das synchrone Starten der angegebenen Anwendung. Das VBA-Programm läuft somit erst dann weiter, wenn die andere Anwendung vollständig aufgestartet und bereit ist.

VBA-Syntax
  Application.ActivateMicrosoftApp(Index As XlMSApplication)

Folgende Konstanten können für Index verwendet werden:

Konstanten für XlMSApplication (Index)
  xlMicrosoftAccess  (4)
  xlMicrosoftFoxPro  (5)
  xlMicrosoftMail  (3)
  xlMicrosoftPowerPoint  (2)
  xlMicrosoftProject  (6)
  xlMicrosoftSchedulePlus  (7)
  xlMicrosoftWord  (1)

Wenn die als Argument angegebene Office-Anwendung nicht auf der Arbeitsstation installiert ist, erscheint der Laufzeitfehler 1004 mit einem entsprechenden Fehlertext (Beispiel FoxPro für Windows):

FoxPro kann nicht ausgeführt werden
Abbildung: Laufzeitfehler bei nicht auffindbarer Programmdatei foxprow.exe

 

Undokumentierte Parameterwerte "True" und "False"

ActivateMicrosoftApp besitzt ein gut verstecktes und höchst interessantes Geheimnis: Nebst den weiter oben aufgeführten XlMSApplication-Konstanten können auch die beiden logischen Werte True (Wahr bzw. -1) und False (Falsch bzw. 0) ebenfalls als gültige Argumentwerte eingesetzt werden. Mit True wird das Kartenspiel Solitär und mit False der Taschenrechner ausgeführt.

Mit dieser Programmzeile kann das Kartenspiel Solitär von Windows (sol.exe) gestartet werden:

  Application.ActivateMicrosoftApp True

Und mit dieser Codezeile lässt sich der Taschenrechner von Windows (calc.exe) starten:

  Application.ActivateMicrosoftApp False

Handelt es sich hier tatsächlich nur um einen Zufall, dass mit True Solitär und mit False der Taschenrechner ausgeführt wird? Weshalb haben die Entwickler von VBA für Microsoft Excel genau diese und nicht andere Windows-Programme genommen? Man hätte genau so gut den Notizblock (notepad.exe), MS Paint (mspaint.exe) oder die Uhr (clock.exe) nehmen können. Oder steht der Rechner symbolisch für Arbeit (False für das "falsche" Programm), während das Kartenspiel Solitär für Spiel und somit Spass steht (True für das "wahre" bzw. "richtige" Programm)?

Der Parameterwert True bzw. -1 ist VBA-intern fest mit der ausführbaren Datei sol.exe von Solitär verknüpft. Wenn sich weder im Windows-Verzeichnis, noch im Windows System-Verzeichnis noch in einem in der Systemumgebungsvariable "Path" angegebenen Verzeichnis eine Datei namens sol.exe befindet, erscheint bei Ausführen der Anweisung "Application.ActivateMicrosoftApp True" der Laufzeitfehler 1004:

Anwendung SOL.EXE kann nicht gestartet werden
Abbildung: Laufzeitfehler wegen nicht vorhandener Programmdatei sol.exe

Analog verhält es sich beim Aufruf mit False bzw. 0, denn dieser Wert ist fest mit der Datei calc.exe verbunden.

 

Weitere interessante Informationen in Bezug auf Solitär und den Taschenrechner finden Sie hier:

XL: Custom Button Images Start Solitaire or Calculator
http://support.microsoft.com/default.aspx?scid=kb;en-us;112374

Zum Seitenanfang


The eXpLorer

Zuletzt aktualisiert am 23.03.2005 / 19:00 Uhr
© Copyright 2002-2005 by Philipp von Wartburg, CH-8917 Oberlunkhofen
Alle Rechte vorbehalten