我制作了一个Excel外接程序,它从列中读取文件名,使用Dir()函数搜索与该名称匹配的pdf,并利用ShellExecute打印它们全部(或其中选定的子集)
我想知道是否有一种方法可以从Excel VBA中止所有活动的打印作业。例如,如果我意识到我不小心触发了100个错误文档的打印,我希望能够按下某种热键来停止并清除打印队列。请注意,打印将在一个未确定的网络打印机上进行(无论正在执行该加载项的计算机的默认值是什么)。
任何能让我走上正轨的建议都会很感激。我怀疑它可能涉及到使用某种Windows库,但我真的不知道,因为我在这方面完全是新手。
你可以这样做:
Public Sub OhSht()
Dim o As Object
For Each o In GetObject("winmgmts:\.rootcimv2").ExecQuery("Select * from Win32_Printer")
o.CancelAllJobs
Next
End Sub
要帮助调试,可以使用这个版本:
Public Sub OhSht()
Dim o As Object, ret
For Each o In GetObject("winmgmts:\.rootcimv2").ExecQuery("Select * from Win32_Printer")
ret = o.CancelAllJobs
Debug.Print o.Name, ret
Next
End Sub
它将列出每个打印机以及该打印机上的CancelAllJobs方法的结果。
返回值0
表示成功取消该打印机上的所有作业。
返回值5
表示拒绝访问该特定打印机。
据我所知没有其他可能的返回值。
这可能有助于增加您的访问权限;试试这个版本:
Public Sub OhSht()
Dim o As Object, ret
For Each o In GetObject("winmgmts:{impersonationLevel=impersonate}//./root/cimv2").ExecQuery("Select * from Win32_Printer")
ret = o.CancelAllJobs
Debug.Print o.Name, ret
Next
End Sub