Start von Word mit Parametern |
|
Word lässt sich ja mittels Parameter starten, um z.B. direkt ein Makro auszuführen (/mMakroname). 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. 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. 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.
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: 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. Tipp: Um Fehler beim Aufruf von Makros zu vermeiden, sollten die Makronamen immer eindeutig sein. |
Besucher: 0 online | 0 heute | 0 diesen Monat | 2219134 insgesamt | Seitenaufrufe: 95 | Letzte Änderung: 17.09.2009 | © 2001-18 Christian Freßdorf | ||||
Logiker, die philosophieren, sind scharfsinnige Irre. R. Vollmann |
powered by phpCMS and PAX |