【发布时间】:2019-02-20 17:24:12
【问题描述】:
我想使用 Excel 以编程方式打印正面和背面(双面)。我该如何做到这一点,同时不知道我要打印的打印机类型(假设它支持双面打印)
【问题讨论】:
我想使用 Excel 以编程方式打印正面和背面(双面)。我该如何做到这一点,同时不知道我要打印的打印机类型(假设它支持双面打印)
【问题讨论】:
由于 VBA 无法直接选择双面打印选项,您可以通过将同一台打印机两次添加到 Windows 并将第二台打印机的默认设置设置为双面打印来解决此问题。
然后你只需要告诉 Excel 在名为 Printer A (duplex) 的打印机上打印。那么最终会变成双工(因为它的默认设置)。
我多次使用这种技术,效果很好。
【讨论】:
所以双面打印不是 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
【讨论】: