Aktuelle Seite:
/vba/vbaWordstartDialogx64.htm
Letzte Änderung: 07.06.2010

Getestet unter Word2003Getestet unter Word2007Getestet unter Word2010Getestet unter Windows7  
Beispiel anzeigen
Makro/Datei speichern
Print

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).

Winword.exe /mAufruf /pMeinMakro "/p1'Parameterwert01 mit Leerzeichen' /p2'Parameter02 ' _
/p3'Parameter03 0815 4711' /p4'Parameter04'"

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:

Code markieren
Sub Aufruf()  
' Wichtig: _
Diese Hilfsfunktion wertet die Kommandozeile aus und MUSS vorhanden sein  
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  
' Anführungszeichen entfernen  
s = Replace(s, Chr(34), "")
sProz() = Split(s, "/m")  ' Makroname abtrennen  
If UBound(sProz()) = 0 Then
    MsgBox "Word wurde ohne Parameterliste aufgerufen.", vbInformation, ""
    Exit Sub  
End If
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)
    ' HochKomma entfernen  
    sParameter(iPos - 2) = Replace(Mid(sPara(iPos), InStr(1, sPara(iPos), Chr(39))), Chr(39), "")
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 

Aufruf der Parameter

Die Auswertung und der Aufruf des angegebenen Makros erfolgt unverändert in der Prozedur Aufruf.


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