我编写的脚本将遍历文件夹中所有启用宏的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
}
}
答案 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