如何使双面打印在Excel中工作?

时间:2019-02-20 17:24:12

标签: excel vba printing

我想用Excel以编程方式打印正反两面。在不知道我要打印的打印机类型的情况下该如何做(假设它支持双面打印)

2 个答案:

答案 0 :(得分:1)

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

  • 打印机A(标准) <-您已经存在的打印机
  • 打印机A(双工) <-再次安装同一台打印机,并将双工设置为默认值

然后,您只需要告诉Excel在名为Printer A (duplex)的打印机上进行打印即可。然后将以双工模式结束(由于其默认设置)。

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

答案 1 :(得分:0)

因此双面打印不是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