2016-11-17 3 views
0

Ich schreibe Skript, das alle Makro-fähigen Word-Dokumente in einem Ordner durchläuft und ein Makro über die Befehlszeile ausführt.Exit-Code für Word VBA-Makro?

Mein Makro zählt Seiten und wenn die Anzahl genau 1 ist, sendet das Dokument an den Drucker.

Da ich eine Menge Dokumente bearbeiten werde (manchmal bis zu 200 gleichzeitig), möchte ich es durchgehen lassen und mit einem Code ungleich Null beenden, damit ich diese Ereignisse abfangen und zurückmelden kann für den Benutzer.

Aber Application.Quit bietet keine Möglichkeit, einen Beendigungscode anzugeben. Gibt es eine andere Möglichkeit, das Dokument so zu beenden, dass mein Skript davon erfahren kann?

EDIT: Code wie angefordert. Ersetzen Sie/path/to stop mit tatsächlichen Pfaden.

function bulkPrint() { 
    // Get folder of files 
    $files = scandir("/path/to/my/files/"); 
    $output = ""; 
    $exitCode = -1; 
    // Loop through each file 
    foreach($files as $file) { 
    // Not real paths 
    exec("/path/to/winword.exe /q /x /mMyMacro \"/path/to/my/files/" . $file . "\"", $output, $exitCode); 
    echo $exitCode; // Always returns 0 because Word exited cleanly 
    } 
} 
+0

beenden Können Sie Ihren Code bekannt geben? Wie läuft das "Makro von der Kommandozeile"? Ich denke, es wäre viel einfacher, nur den Makro-Return-Status zu haben. – Comintern

+0

vielleicht Sie wollen, ist: 'Sub Quit() MsgBox "quit" Exit Sub End Sub ' – Andy

+0

@Andy: Das gerade die Unter verlässt und beenden Sie Word nicht und geben einen Nicht-Null-Code. – Grayda

Antwort

0

Dies ist nicht wirklich eine Antwort, aber es ist eine passable Workaround für meine Situation.

Wie einige Leute in den Kommentaren vorgeschlagen haben, können Sie mit VBA eine Datei im selben Ordner erstellen und diese dann als Ihren Exit-Code verwenden.

In meinem Fall beendet der Code wie folgt aufzublicken:

Sub MyMacro() 
    On Error GoTo ErrHandler 
    ' My code that may or may not fail 
    ' More code here to exit if no error 
    Exit Sub 
ErrHandler: 
    WriteError Err.Description 
    End 
End Sub 

Sub WriteError(errText As String) 
    Dim fso As Object 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    Dim oFile As Object 
    Set oFile = fso.CreateTextFile(ActiveDocument.Path & "\" & ActiveDocument.Name & ".err") 
    oFile.WriteLine errText 
    oFile.Close 
    Set fso = Nothing 
    Set oFile = Nothing 
End Sub 

Also, wenn MyMacro() carks es, die Fehlerbeschreibung in einer Datei mit dem gleichen Ordner und Namen (aber mit .err am Ende geschrieben) und dann beendet. Wenn mein Skript mit Word fertig ist, durchläuft es alle .err-Dateien im Verzeichnis und gibt den Dateinamen und den Inhalt auf dem Bildschirm aus, damit ich sehen kann, welche Elemente bestanden und welche fehlgeschlagen sind.

Ich kann dies weiter ausbauen, um nach fast allem zu suchen und die spezifischen Fehler zu erfassen, nach denen ich suche.

Ich werde dies jedoch nicht als die Antwort markieren. Während es mein spezifisches Problem in einer Weise löst, mit der ich meistens glücklich bin, beantwortet es nicht meine Kernfrage von Kann VBA mit einem Fehlercode