我编写了一个程序,用于从Excel电子表格列表中打印多个具有不同文件扩展名的.pdf
。
问题是打印机在调用Application.SendKeys "^p~", False
行之后接收pdf需要30秒到一分钟的时间。
为了得到这个,我在关闭文件之前使用Application.Wait (Now + TimeValue("0:01:03"))
等待一分钟(加上3秒才安全)。
对我来说,似乎应该有一个更好的方法,而不仅仅是让程序等待,所以我环顾四周,found a question about this lovely gem称为Application.OnTime
。
我尝试了one of the answers的示例:
Sub test2()
ActiveSheet.Cells(1, 1).Value = ActiveSheet.Cells(1, 1).Value + 1
Application.OnTime Now + TimeValue("00:00:5"), "test2"
End Sub
然而,当我试图停止上面的代码时,它继续进行无限循环,直到我使用Windows任务管理器杀死excel,我无法阻止它。
我希望能够添加一个小消息框或类似的东西,以便用户可以在等待时间之间点击。
因此,当程序等待一分钟时,用户可以在下一个pdf上手动单击并启动程序,或者如果需要提前停止打印,则单击另一个按钮退出。像这样:
Sub pdfPrinter()
'...
'Insert all the other code here
'...
Application.SendKeys "^p~", False
Application.OnTime Now + TimeValue("00:01:02"), "pdfPrinter"
continue= MsgBox("Click Retry to print again, or cancel to stop printer.", vbRetryCancel)
If continue = vbRetry Then
Call pdfPrinter
ElseIf continue = vbCancel Then
Exit Sub
End If
End Sub
答案 0 :(得分:3)
Application.OnTime(与Application.Wait不同)是Asynchronous
之后的代码
Application.OnTime Now + TimeValue("00:01:02"), "pdfPrinter"
立即运行。
如果您想要打印另一张PDF,您需要使用不同的第一张计划调用Application.OnTime。
现在,取消Application.OnTime,当它已经启动时是另一回事:
为此,您需要存储计划运行相应功能的时间,然后使用以下代码取消它:
Application.OnTime Now + TimeValue("00:00:50"), "test", schedule:=False