You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MS Word宏打印后添加延迟:解决PDF打印乱码问题

解决Word宏打印PDF后乱码的问题

嘿,我完全懂你的困扰——虚拟打印机还没把PDF生成好,Word就急着保存关闭文档,结果导致PDF乱码。你之前用Excel的Wait命令没效果,其实是踩了两个小坑:一是Word的打印默认是异步的,二是没必要调用Excel的等待功能。

最优解决方案:让Word等待打印完成再继续

其实根本不需要加延迟,只需要修改PrintOut语句,让它同步执行——也就是Word会等打印任务彻底完成,再往下执行保存和关闭操作。修改后的宏代码如下:

Sub PrintClose()
    ' 发送打印任务,并强制等待打印完成后再执行后续代码
    ActiveDocument.PrintOut Copies:=1, Background:=False
    ActiveDocument.Save
    If Application.Documents.Count > 1 Then
        ActiveDocument.Close
    Else
        Application.Quit
    End If
End Sub

这里的关键是Background:=False参数,它把默认的异步打印改成了同步,从根源上避免了“打印未完成就关文档”的问题,比加延迟靠谱多了,也不会浪费不必要的等待时间。

备用方案:用Word自带的延迟等待

如果因为某些虚拟打印机不支持同步打印(比如少数老旧的PDF打印机),那我们可以用Word自带的等待功能,在打印后加一段延迟。注意一定要把延迟语句放在PrintOut之后,这样才会先启动打印,再等待:

Sub PrintClose()
    ActiveDocument.PrintOut Copies:=1
    ' 等待5秒,你可以根据实际情况调整时间(比如改成00:00:03或00:00:07)
    Application.Wait Now + TimeValue("00:00:05")
    ActiveDocument.Save
    If Application.Documents.Count > 1 Then
        ActiveDocument.Close
    Else
        Application.Quit
    End If
End Sub

你之前用Excel的Wait出现“先等待再打印”的问题,大概率是把等待语句放错了位置——只要把Application.Wait放在PrintOut后面,VBA就会先执行打印,再进入等待,不会搞反顺序。而且用Word自带的Application.Wait,不需要额外启动Excel进程,更稳定。

内容的提问来源于stack exchange,提问作者ErmaX

火山引擎 最新活动