我正在尝试从excel打印一个word文档。
这有效,除非我需要为此打印作业启用订书机。
我的打印机是 Xerox workcentre 5755,可以在左上角放置一两个订书钉。
Excel 显然可以管理这个,我不需要进入打印机驱动程序属性来启用装订,我可以直接从文件打印页面启用它。
当我转到此页面时,在“设置”下方有一个下拉菜单,上面写着“无订书钉”并带有订书机符号。
如果我点击它,我会选择“无订书钉”、“左上角订书钉”和“左上角有两个订书钉”以及其他灰色的选项。
我尝试录制一个宏以使用左上角和双面打印进行打印。
这就是它给我的。
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
这既不装订也不双面打印。
我阅读了有关该主题的多个线程,但它们都很旧并且并没有真正回答问题,因为在所有情况下,提问者都需要更改属性中的驱动程序设置,所以这不是我的情况。我有一台打印机,它将订书机功能暴露给 excel。
我仍然不得不求助于我找到的答案之一,那就是使用非常不可靠的 sendkeys。
这是我的代码的样子。
Sub PrintChecklist()
Dim myprinter As String
Dim PrintersList() As String
Dim printer_name As String
Dim x As Long
Dim wordapp As Word.Application
Dim CBC As CommandBarControl
Set wordapp = CreateObject("word.Application")
wordapp.Documents.Open "C:\Users\XXXXX\Desktop\pool3.doc"
wordapp.Visible = True
myprinter = Application.ActivePrinter
wordapp.WindowState = wdWindowStateMaximize
PrintersList() = GetPrinterFullNames
For x = 1 To UBound(PrintersList)
If InStr(1, PrintersList(x), "MYPRINTERNAME", vbTextCompare) > 0 Then _
printer_name = PrintersList(x)
Next x
wordapp.ActivePrinter = printer_name
DoEvents
wordapp.Application.Activate
' only works in only one word opened
Dim lRet As Long
lRet = FindWindow("OpusApp", vbNullString)
SetForegroundWindow lRet
On Error Resume Next
Set CBC = Application.VBE.CommandBars.FindControl(ID:=752)
On Error GoTo 0
If Not CBC Is Nothing Then
CBC.Execute
DoEvents
'~~> File --> Print
SendKeys "%fp"
Sleep 3000
SendKeys "k"
Sleep 100
SendKeys "{DOWN}"
Sleep 100
SendKeys "~"
Sleep 100
SendKeys "%fp"
Sleep 100
Sleep 1000
SendKeys "s"
SendKeys "3-5,1-2"
SendKeys "%fp"
Sleep 1000
SendKeys "d"
SendKeys "{DOWN}"
SendKeys "~"
SendKeys "%fp"
Sleep 2000
SendKeys "p"
SendKeys "{NUMLOCK}"
End If
Sleep 5000
wordapp.ActivePrinter = myprinter
wordapp.Quit SaveChanges:=wdDoNotSaveChanges
End Sub
它可以工作,但如果有延迟,或者如果用户在那 10 秒内触摸了任何东西,那么一切都会很快出错。
欢迎任何建议!
最佳答案
由于这已引起注意但没有官方答案,这就是我处理这个问题的方法。
我的打印机是网络打印机,所以我以不同的名称第二次将它添加到我的计算机。我将该打印机的默认设置为“使用左上订书钉”
现在,如果我想用订书钉打印,我会打印到那个打印机名称而不是另一个。
有点古怪,但它工作可靠
关于vba - 打印时如何启用订书机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38515283/