Word VBA宏的退出代码?

时间:2016-11-17 00:42:33

标签: vba

我编写的脚本将遍历文件夹中所有启用宏的Word文档,并从命令行运行宏。

我的宏计算页数,如果计数正好为1,则将文档发送到打印机。

因为我会做很多文档(有时一次最多200个)我想让它运行并退出非零代码所以我可以捕获这些事件和将它们报告给用户。

Application.Quit没有提供指定退出代码的方法。还有另一种方法让文档以我的脚本可以知道的方式退出吗?

编辑:代码按要求。用实际路径替换/ path / to stuff。

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

1 个答案:

答案 0 :(得分:0)

这不是一个真正的答案,但对我的情况来说,这是一个可以解决的问题。

正如一些人在评论中建议的那样,您可以使用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