2016-11-17 427 views
0

我正在编写脚本,它将遍历文件夹中所有启用宏的Word文档并从命令行运行宏。退出Word VBA宏的代码?

我的宏计数页面,如果计数完全是1,则将文档发送到打印机。

因为我会做很多文件(有时一次最多200个)我想让它通过并以非零代码退出,以便我可以捕获这些事件并将其报告回来给用户。

但是Application.Quit没有提供指定退出码的方法。还有另外一种方式让文档退出,这样我的脚本就可以知道它了吗?

编辑:代码按要求。用实际路径替换/路径/东西。

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

您可以发布您的代码吗?你如何运行“从命令行宏”?我似乎只是有宏返回状态会更容易。 – Comintern

+0

你想也许是:'子退出() MSGBOX“跳槽” 退出小组 结束小组 ' – Andy

+0

@Andy:这只是退出子,不退出Word,并返回一个非零代码。 – Grayda

回答

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() carks它,错误描述被写入一个文件相同的文件夹和名称(但.err末)然后退出。当我的脚本运行Word时,它会遍历目录中的所有.err文件,并将文件名和内容输出到屏幕,以便我可以查看哪些项目已通过,哪些已失败。

我可以进一步扩展以检查几乎任何东西,并捕获我遇到的具体错误。

虽然我不打算将其标记为答案。虽然它的确解决了我特别喜欢的问题,但它并没有回答我的核心问题VBA可以退出并显示错误代码