2017-09-01 2 views
2

Ich brauche ein Wort Makro mit Powershell ausführen. Bisher habe ichPowershell mit Argument/Parameter

$wd = new-object -comobject word.application 
$wd.run("PrintAll") 
$wd.quit() 

Was ich möchte, ist einen Parameter oder Argument tun hinzufügen, die auf dem Netzwerk zu einem bestimmten Ordner zeigen werden und dann diese Parameter auf das Makro übergeben. Das Makro beginnt wie folgt aus:

Public sPath 
Sub PrintAll() 

Dim fs, f, fc, f1 
Set fs = CreateObject("Scripting.FileSystemObject") 
Set f = fs.GetFolder(sPath) ' Provide folder name where doc files are present 
Set fc = f.Files 
Dim FileList() As String 
Dim Cnt As Integer 
Cnt = 0 
Dim myDoc As Word.Document 

Ich habe über 70 verschiedene Speicherorte, die ich brauche, um zu zeigen, und das Ziel ist es, nur 1 Sub haben (Makro) in Word, aber separaten Powershell-Skripte zu haben, Zeigen Sie auf jeden Ordner und übergeben Sie ihn an den einen Sub (Makro). Außerdem möchte ich, dass das Argument in Powershell den Speicherort des Ordners an die Variable sPath im Makro sendet.

Irgendwelche Gedanken darüber, wie ich das erreichen kann?

Ich versuchte

$wd = new-object -comobject word.application 
$wd.run('PrintAll', '\\serverX\g$\xxxxxxxx') 
$wd.quit() 

aber erhielt Fehler "Argument: '2' sollte ein System.Management.Automation.PSReference sein Verwenden [ref].."

Antwort

0

OK, ich habe es getestet.

1 Bitte) an die VBA-Umgebung gehen und diesen Code schreiben (oh Gott diese VB6)

Public Function PrintAll(arg1 As String, arg2 As String) As String 

    MsgBox arg1 + arg2 

    PrintAll = arg1 + arg2 

End Function 

2) zu Powershell gehen und diesen Code schreiben:

$word = New-Object -ComObject Word.Application 
$doc = $word.Documents.Open("C:\Users\Ali\Desktop\Files\A.docx") 
$arg1=[ref]"Hello" 
$arg2=[ref]",Buddy" 
$word.Run("PrintAll",$arg1,$arg2) # The returned value is Hello,Buddy 
$doc.close() 
$word.quit() 
+0

Leider muss ich Führen Sie das Word-Makro aus, da vor dem Drucken einige Formatierungen für das Dokument erforderlich sind. Ich denke nicht, dass das funktioniert, weil es nicht wirklich zum Makro aufruft. –

+0

Ich habe es, Ihr Problem ist: Sie übergeben einen Wert in der Funktion, die nicht geeignet ist Argument für diese Funktion. –