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




