Aktuelle Seite:
/vba/vbaWordstartDialog.htm
Letzte Änderung: 17.09.2009

Getestet unter Word2000Getestet unter WordXPGetestet unter Word2003  
Beispiel anzeigen
Makro/Datei speichern
Print

Word lässt sich ja mittels Parameter starten, um z.B. direkt ein Makro auszuführen (/mMakroname).
Allerdings kann man diesem Makro keinen Parameter im Aufruf mitgeben, so dass man den eigentlichen Aufruf mit Paramter im aufgerufenen Makro fest definieren muss.

Mit Hilfe des APIs GetCommandLine lässt sich aber die Kommandozeile des Word-Starts auswerten, so dass man darüber durchaus mehrere Parameter mitangeben kann.
Ein Beispiel könnte dann folgendermaßen aussehen:

Winword.exe /mAufruf /pMeinMakro /p1"Aufruf mit Parameter"  /p2"Parameter 2" /p3"Parameter 3"

Der 1. Parameter /m muss dabei das Makro angeben, das die Kommandozeile auswertet. Dies ist eine Prozedur, in der das API gekapselt ist.
Der 2. Parameter /p bezeichnet das Makro, das anschließend ausgeführt werden soll. Dies muss natürlich in einem Modul vorhanden sein, das beim Start von Word mitgeladen wird. Also entweder ein Modul in der Normal.dot oder besser eines Add-Ins, das im StartUp-Ordner von Word liegt und von dort mitgeladen wird.
Die weiteren Parameter /p1 bis /p3 (beliebig viele bis zu einer Aufruflänge von insgesamt 255 Zeichen) übergeben dann verschiedene Paramter an die auszuführende Prozedur. Die Übergabeparameter müssen im bereitgestellten Code-Beispiel in Anführungszeichen gesetzt werden, damit sie keinen Fehler beim Aufruf von Word verursachen und auch besser ausgewertet werden können.

Die folgende Abbildung zeigt die verschiedenen Aufrufparameter, wobei die Prozedur Aufruf die Kommandozeile auswertet , das Makro MeinMakro aufruft und dabei alle vorhandenen Parameter (hier z.B. 3) an dieses Makro übergibt.

Aufruf der Parameter

Die gezeigte Ausgabe erfolgt dabei aus dem Makro MeinMakro:

Sub MeinMakro(sProzedur As String, Optional sMakro As String, Optional sLine As String, _
 Optional sParameter As Variant)  
Dim sPar As String
Dim sCall As String
Dim i As Integer
sCall = "Aufruf: " & sLine & vbCrLf & _
        "Makro /m: " & sMakro & vbCrLf & "Prozedur /p: " & sProzedur & vbCrLf
For i = LBound(sParameter) To UBound(sParameter)
If sParameter(i) <> "" Then sPar = sPar & "Parameter /p" & i + 1 & ": " & sParameter(i) & vbCrLf
Next i
MsgBox sCall & sPar, vbInformation, "Prozedur: " & sMakro & ""
End Sub  

Die Auswertung und der Aufruf des angegebenen Makros erfolgt in der Prozedur Aufruf:

Code markieren
Sub Aufruf()  
Dim s As String
Dim sProz() As String, sPara() As String
Dim sMakro As String
Dim sProzedur As String
Dim iPos As Integer
Dim sParameter() As String
s = ShowCommandline  ' API zum Auslesen der Kommandozeile  
sProz() = Split(s, "/m")  ' Makroname abtrennen  
sPara() = Split(sProz(1), "/p")  'Prozeduren und Parameter abtrennen  
' Makroname  
sMakro = Trim(sPara(0))
' Aufzurufende Prozedur  
sProzedur = Trim(sPara(1))
' Parameter-Array ermitteln  
ReDim sParameter(UBound(sPara) - 2)
' Schleife über alle angegebenen Parameter  
For iPos = 2 To UBound(sPara)
  ' Anführungszeichen entfernen  
  sParameter(iPos - 2) = Replace(Mid(sPara(iPos), InStr(1, sPara(iPos), Chr(34))), Chr(34), "")
Next iPos
On Error GoTo err_Call
' Angegebene Prozedur aufrufen  
' sProzedur: Name des Makros, das die Kommandozeile auswertet  
' sMakro: Name des aufzurufenden Makros  
' s: Komplette Kommandozeile  
' sParameter(): Array mit allen angegebenen Parametern  
Application.Run sProzedur, sProzedur, sMakro, s, sParameter()
Exit Sub  
err_Call:
MsgBox "Fehler in der Kommandozeile:" & vbCrLf & s
End Sub  

Der Aufruf des angegebenen Makros erfolgt über die Application.Run-Methode, da nur so ein variabler Aufruf ohne konkreter Angabe des Prozedurnamens möglich ist.

' Angegebene Prozedur aufrufen  
' sProzedur: Name des Makros, das die Kommandozeile auswertet  
' sMakro: Name des aufzurufenden Makros  
' s: Komplette Kommandozeile  
' sParameter(): Array mit allen angegebenen Parametern  
Application.Run sProzedur, sProzedur, sMakro, s, sParameter()

In diesem Beispiel werden alle Informationen an die aufzurufende Prozedur weitergegeben, um zu verdeutlichen, dass so auch wirklich alle Parameter in der Kommandozeile durchgereicht werden.
Dieses Beispiel lässt natürlich viel Spielraum für eigene Anwendungen und soll nur die Möglichkeit skizzieren, wie doch mehrere Parameter beim Start von Word mitangegeben werden können.

Tipp: Um Fehler beim Aufruf von Makros zu vermeiden, sollten die Makronamen immer eindeutig sein.


 www.chf-online.de/vba/vbaWordstartDialog.htm © 2001-11 Christian Freßdorf (Zaphod-Systems)