簡體   English   中英

Word VBA宏的退出代碼?

[英]Exit code for Word VBA Macro?

我正在編寫腳本,該腳本將循環遍歷文件夾中所有啟用宏的Word文檔,並從命令行運行宏。

我的宏對頁面進行計數,如果計數恰好為1,則將文檔發送到打印機。

因為我要處理很多文檔(一次最多處理200個文檔),所以我想讓它運行並以非零代碼退出,這樣我就可以捕獲這些事件並將其報告給用戶。

但是Application.Quit沒有提供指定退出代碼的方法。 是否有另一種方法可以使我的腳本可以知道文檔的退出方式?

編輯:按要求編碼。 將/ path /替換為實際路徑。

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
  }
}

這並不是真正的答案,但是對於我的情況,這是一個可行的解決方法。

正如評論中一些人建議的那樣,您可以使用VBA在同一文件夾中創建一個文件,然后將其用作退出代碼。

就我而言,代碼最終看起來像這樣:

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

因此,當MyMacro()對其進行提示時,錯誤描述將​​被寫入具有相同文件夾和名稱(但末尾帶有.err )的文件,然后退出。 當我的腳本運行完Word后,它將遍歷目錄中的所有.err文件,並將文件名和內容輸出到屏幕,以便我可以查看哪些項目通過了哪些項目以及哪些失敗了。

我可以進一步擴展它,以檢查幾乎所有內容並捕獲我追尋的特定錯誤。

不過,我不會將其標記為答案。 雖然它確實以我最滿意的方式解決了我的特定問題,但它沒有用錯誤代碼回答我的核心問題: VBA是否可以退出

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM