【问题标题】:How to get Duplex printing working in Excel?如何让双面打印在 Excel 中工作?
【发布时间】:2019-02-20 17:24:12
【问题描述】:

我想使用 Excel 以编程方式打印正面和背面(双面)。我该如何做到这一点,同时不知道我要打印的打印机类型(假设它支持双面打印)

【问题讨论】:

    标签: excel vba printing


    【解决方案1】:

    由于 VBA 无法直接选择双面打印选项,您可以通过将同一台打印机两次添加到 Windows 并将第二台打印机的默认设置设置为双面打印来解决此问题。

    • 打印机 A(标准)
    • 打印机 A(双面打印)

    然后你只需要告诉 Excel 在名为 Printer A (duplex) 的打印机上打印。那么最终会变成双工(因为它的默认设置)。

    我多次使用这种技术,效果很好。

    【讨论】:

    • 这也是一个不错的选择,但如果任务要求整个过程以编程方式完成,则不起作用
    【解决方案2】:

    所以双面打印不是 Excel 的原生选项,而且很难做到。

    那里有一些关于调用打印机 API 的帖子,但这些帖子与您使用的打印机无关。

    我通过将 SendKeys 与 VBS 脚本相结合来实现它。我们开始:

    Sub SendKeysDuplex()
    
    Application.Dialogs(xlDialogPrinterSetup).Show
    ShellCall
    
    End Sub
    

    --

    Sub ShellCall()
    
    Shell "wscript C:\FileName.vbs", vbNormalFocus
    
    End Sub
    

    --

    Set WSHShell = WScript.CreateObject("WScript.Shell")
    WSHshell.AppActivate "Excel.exe"
    wsh.sleep 1000 ' wait 1 second
    WSHshell.SendKeys "%psp"
    WSHshell.SendKeys "{TAB 9}"
    WSHshell.SendKeys "{Enter}"
    wsh.sleep 3000 ' wait 1 second
    WSHshell.SendKeys "{TAB 4}"
    WSHshell.SendKeys "n"
    WSHshell.SendKeys "y"
    WSHshell.SendKeys "{Enter}"
    wsh.sleep 500 ' wait 1 second
    'WSHshell.SendKeys "{Enter}"
    'wsh.sleep 500 ' wait 1 second
    'WSHshell.SendKeys "%psp"
    'wsh.sleep 1000
    WSHshell.SendKeys "{TAB 7}"
    WSHshell.SendKeys "{Enter}"
    wsh.sleep 500
    WSHshell.SendKeys "{Enter}"
    wsh.sleep 500
    

    这只是打印当前处于活动状态的选项卡。要让脚本设置好然后继续执行,我建议将其与Wait for shell command to complete 集成在一起

    或者简单地将一个按钮作为“设置打印机”按钮,将第二个按钮作为“打印东西”

    另请注意:这必须通过电子表格上的按钮执行,找到宏并按 F5 不会这样做。

    编辑:这只会在一页上设置打印机。例如,如果您需要 14 页,则在第一个选项卡上设置启动此宏的按钮,然后打印需要打印的 14 个选项卡。

    Set WSHShell = WScript.CreateObject( "WScript.Shell" )
    WSHshell.AppActivate " Excel.exe " 
    wsh.sleep 1000
    For i = 1 To 14
    WSHshell.SendKeys  "^"&"{PGDN}" 
    wsh.sleep 500
    WSHshell.SendKeys "%psp" 
    wsh.sleep 2500
    WSHshell.SendKeys "{TAB 1}" 
    wsh.sleep 500
    WSHshell.SendKeys "o" 
    wsh.sleep 3500
    WSHshell.SendKeys "{TAB 4}" 
    wsh.sleep 500
    WSHshell.SendKeys "n" 
    WSHshell.SendKeys "y" 
    wsh.sleep 500
    WSHshell.SendKeys "{TAB 2}" 
    WSHshell.SendKeys "l" 
    wsh.sleep 500
    WSHshell.SendKeys "{Enter}" 
    wsh.sleep 500
    WSHshell.SendKeys "{Enter}" 
    wsh.sleep 500
    Next
    

    【讨论】:

    • 为什么要使用复杂的 VBScript 而不是直接在 VBA 中执行呢?
    • 由于综合因素。使用 SendKeys 打开对话框后,它不会直接从 VBA 使用 SendKeys 处理输入,因此需要在外部进行。此外,如果您打开东西,例如使用 Dialogs.show,您将无法以编程方式执行任何操作,直到您做出选择。这很烦人,我希望我可以直接从 Excel 中完成,而不需要外部文件
    • 没问题,这是一个完全合理的问题!
    猜你喜欢
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多