Start von Word mit Parametern II |
|
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: 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 Die Auswertung und der Aufruf des angegebenen Makros erfolgt unverändert in der Prozedur Aufruf. |
Besucher: 0 online | 0 heute | 0 diesen Monat | 2219127 insgesamt | Seitenaufrufe: 100 | Letzte Änderung: 07.06.2010 | © 2001-18 Christian Freßdorf | ||||
Ich habe keine Lösung, aber ich bewundere das Problem. Ashleigh Brilliant |
powered by phpCMS and PAX |