2
www.ChF-Online.de  

Start von Word mit Parametern

   Neuigkeiten
   API-Aufrufe in VBA
   VBA2HTML
   Word
   Word-VBA
aktiv aktiv Verschiedenes
 Dateiname ohne Endung
 Dokumentstrukturanzeige
 Fenster anordnen
 Fensterliste
 Fensterliste (II)
 Kalender erstellen
 Kommentarinformationen
 Lesezeichen
 Beliebigen Ordner öffnen
 Position der Einfügemarke
 Seitenanfang/-ende
 Shapes ansprechen
 Sicherheitskopien erstellen
aktiv  Word-Startparameter
 Word-Startparameter II
 Startordner "Bild einfügen"
 Tags finden u. bearbeiten
 Tags finden/bearbeiten (II)
 Text2WordArt
 Textbausteine verwenden
 Textmarken (I)
 Textmarken (II)
 Überschrift zu Textmarke
 VBA-Konverter
 Wasserzeichen
 Zeichen tauschen
 Feld-Arbeiten
 Form-Sachen
 Menü-/Symbolleisten
 VBA und Lotus Notes
 VBA und Mail
 Inside VBAIDE
 Von Word nach Outlook
 Fix-und-Fertiges/Projekte
   Word2007 (RibbonX)
   Word2010 (RibbonX)
   Outlook-VBA
   Links zu VB(A)
   DocToHelp
   Netport Express XL
   Astronomie
   Gästebuch
   Volltextsuche
   Sitemap
   Buch:Word-Programmierung
   Impressum & Kontakt
   Datenschutzerklärung
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.


 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