我已经编写了一个程序来打印多个具有不同文件扩展名的Excel电子表格列表中的.pdf
。
问题是,在调用Application.SendKeys "^p~", False
行之后,打印机接收pdf需要30秒到一分钟不等。为了达到这个目的,我使用Application.Wait (Now + TimeValue("0:01:03"))
在关闭文件之前等待一分钟(加上3秒只是为了安全)。对我来说,似乎应该有一个比仅仅让程序等待更好的方法,所以我环顾四周,发现了一个关于这个被称为Application.OnTime
的可爱宝石的问题。
我尝试了其中一个答案的样本:
Sub test2()
ActiveSheet.Cells(1, 1).Value = ActiveSheet.Cells(1, 1).Value + 1
Application.OnTime Now + TimeValue("00:00:5"), "test2"
End Sub
然而,当我试图停止上面的代码,它一直在一个无限循环,我无法停止它,直到我杀死excel使用windows任务管理器
我希望能够添加一个小消息框或类似的东西,以便用户可以在等待时间之间点击。
因此,当程序等待一分钟时,用户可以手动单击并启动下一个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
应用。OnTime(不像Application.Wait)是异步的
后面的代码Application.OnTime Now + TimeValue("00:01:02"), "pdfPrinter"
立即运行。
如果你想打印另一个PDF,你需要调用Application。OnTime与第一个不同的时间表。
现在,取消应用程序。OnTime,当它已经启动时是另一回事:
为此,您需要存储相应函数计划运行的时间,然后使用以下代码取消它:
Application.OnTime Now + TimeValue("00:00:50"), "test", schedule:=False