打印时如何启用装订器?

时间:2016-07-21 22:19:50

标签: excel vba excel-vba printing

我正在尝试从excel打印word文档。

除非我需要为此打印作业启用装订器,否则无效。

我的打印机,Xerox工作中心5755,可以在左上角放置一个或两个订书钉。

Excel显然可以管理这个,我不需要进入打印机驱动程序属性来启用装订,我可以直接从文件打印页面启用它。

当我转到此页面时,在“设置”下方有一个带有订书机符号的“No Staples”下拉列表。

如果我点击它,我会选择“No Staples”,“Staple Top Left”和“左上方的两个Staples”以及其他灰色的选项。

我尝试使用左上方的装订和双面打印来录制要打印的宏。

这就是它给我的。

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
    IgnorePrintAreas:=False

既不装订也不打印双面打印。

我读了关于这个主题的多个主题,但它们都已经老了,并没有真正回答这个问题,因为在所有情况下,提问者都需要更改属性中的驱动程序设置,这不是我的情况。我有一台打印机,将订书机功能暴露出来。

我仍然不得不求助于我找到的答案之一,那就是使用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秒范围内触摸任何东西,那么一切都会很快出错。

欢迎任何建议!

1 个答案:

答案 0 :(得分:0)

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

我的打印机是网络打印机,因此我已经第二次将它添加到我的计算机上了,使用了另一个名称。我将该打印机的默认设置为“左上方装订”

现在,如果我想使用装订钉进行打印,我将使用该打印机名称而不是其他名称。

有点古怪,但工作可靠