【问题标题】:How do I enable stapler when printing?打印时如何启用订书机?
【发布时间】:2016-11-25 16:45:51
【问题描述】:

我正在尝试从 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 秒内触摸了任何东西,那么很快就会出错。

欢迎任何建议!

【问题讨论】:

  • 据我所知,这是打印机特有的功能,Windows 不提供任何 API 以编程方式对其进行设置。您需要像现在一样操作打印机窗口。
  • 奇怪,这个截图i.imgur.com/2qER9rO.jpg可以看到,好像是excel处理的。我找到了解决这个问题的另一种方法,虽然它有点杂乱无章,但它仍然比 sendkeys 更可靠(已经使用了几个月!)。我去了另一台计算机并共享打印机。然后我将这台打印机添加到我的计算机上,所以我现在有了打印机的第二个副本。我将这台打印机命名为“Checklistprinter”并将订书机设置为永久开启。现在它每次都打印,我不再需要“sleep 5000”!

标签: vba excel printing


【解决方案1】:

由于这已引起关注但没有官方答复,这就是我的处理方式。

我的打印机是网络打印机,所以我第二次以不同的名称将它添加到我的计算机。我将该打印机的默认设置为“使用左上订书钉”

现在,如果我想用订书钉打印,我会打印到那个打印机名称而不是另一个。

有点古怪,但工作可靠

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多