Während das vorgestellte Beispiel zum Aufruf von Word mit mehreren Parametern unter Windows 2000 und Windows XP fehlerfrei funktioniert, bereitet es unter Windows 7 (64-Bit) Probleme. So werden die in Anführungszeichen gefassten Parameter einfach an Leerzeichen abgeschnitte, ohne das ein System erkennbar ist (keine Länge von 255 Zeichen o.ä.).
Aus diesem Grund ist für Windows Vista (x64) und Windows 7 eine Anpassung notwendig, auf die mich freundlicherweise Martin Rumpf hingewiesen hat - an dieser Stelle ein herzliches Danke dafür).
Als funktionierende Alternative kann der Parameterblock in Anführungszeichen und die einzelnen Parameter in einfache Anführungszeichen (') gefasst werden. Zusätzlich muss dann natürlich die Auswerteroutine angepasst werden:
Sub Aufruf() ' Wichtig: _
Diese Hilfsfunktion wertet die Kommandozeile aus und MUSS vorhanden sein Dim s AsStringDim sProz()AsString, sPara()AsStringDim sMakro AsStringDim sProzedur AsStringDim iPos AsIntegerDim sParameter()AsString
s = ShowCommandline ' API zum Auslesen der Kommandozeile ' Anführungszeichen entfernen
s = Replace(s, Chr(34), "")
sProz() = Split(s, "/m")' Makroname abtrennen If UBound(sProz()) = 0 ThenMsgBox"Word wurde ohne Parameterliste aufgerufen.", vbInformation, "" Exit Sub EndIf
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 ToUBound(sPara) ' HochKomma entfernen
sParameter(iPos - 2) = Replace(Mid(sPara(iPos), InStr(1, sPara(iPos), Chr(39))), Chr(39), "")Next iPos
OnErrorGoTo 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
Die Auswertung und der Aufruf des angegebenen Makros erfolgt unverändert in der Prozedur Aufruf.