ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3953|回复: 10

我改进了EXCEL双面(奇偶页)打印程序,使它更加灵活了

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-8-24 18:02 | 显示全部楼层 |阅读模式
本帖最后由 anothers 于 2014-8-24 18:16 编辑

很久以前就已经有高人编写了一段用于EXCEL双面打印的脚本了,但这个脚本欠缺灵活性!
当我使用这个程序时,那台老旧的打印机,打到其中一页把两张纸都吞进去了! >_<!
这样子就导致了整个页面都错乱了,而且程序每执行一次都会把所有的页全部按奇偶排序打印一次!

这就促使我改进这个脚本了,改进后的这个程序会先要求用户输入起始页结束页,然后再按奇偶排序打印。
功能如下:
①如果用户想打印全部,就直接按“确定”或者“回车”两次即可打印全部。
②程序对于输入的数据作了严格限制:只允许用户输入不少于零的、不大于工作表总页数的数字。否则将要求重新输入。
③用户按“取消”则退出脚本,防止死循环
④当起始页和结束页是相差1页的话:打印完一面后,程序会自动提示用户翻转同一张纸再次打印,当起始页和结束页一样时,则程序会知道用户只打印一面。
⑤起始页和结束页谁大谁小无关系,用户可以从第1页打印到第5页,也可以从第5页打印到第1页。
程序代码如下:
  1. Sub 可选择页码范围的双面打印程序()
  2. Dim pageTotal As Integer
  3. Dim jPage As Integer
  4. Dim dPage As Integer
  5. Dim OK
  6. pageTotal = Application.ExecuteExcel4Macro("get.document(50)")
  7. Do '让用户输入起始页码,只允许用户输入不少于零的、不大于工作表总页数的数字,按取消则退出程序!
  8. a = InputBox("请输入起始页码,直接按“确定”从第1页开始打印", "打印起始页", 1)
  9. If StrPtr(a) = 0 Then
  10. Exit Sub
  11. ElseIf IsNumeric(a) = False Then
  12. MsgBox "你输入的不是数字,请重新输入!"
  13. ElseIf a * 1 > pageTotal Then
  14. MsgBox "此工作表只有" & pageTotal & "页,请重新输入!"
  15. ElseIf a * 1 < 0 Then
  16. MsgBox "你不能输入少于零的页码,请重新输入!"
  17. Else
  18. Exit Do
  19. End If
  20. Loop
  21. Do  '让用户输入结束页码,只允许用户输入不少于零的、不大于工作表总页数的数字,按取消则退出程序!
  22. b = InputBox("请输入结束页码,直接按“确定”为:第" & pageTotal & "页", "打印结束页", pageTotal)
  23. If StrPtr(b) = 0 Then
  24. Exit Sub
  25. ElseIf IsNumeric(b) = False Then
  26. MsgBox "你输入的不是数字,请重新输入!"
  27. ElseIf b * 1 < 0 Then
  28. MsgBox "你不能输入少于零的页码,请重新输入!"
  29. ElseIf b * 1 > pageTotal Then
  30. MsgBox "此工作表只有" & pageTotal & "页,请重新输入!"
  31. Else
  32. Exit Do
  33. End If
  34. Loop
  35. Select Case b - a  '根据用户输入的页码,分四种情况处理:
  36. Case 0 '①起始页和结束页相同,即打印一页一面。
  37. ActiveSheet.PrintOut from:=a, To:=a
  38. Case 1, -1 '②起始页和结束页之差为1页,即打印一页两面。
  39. ActiveSheet.PrintOut from:=a, To:=a
  40. OK = MsgBox("请把这张纸反转另一面放到打印机,按“确定”再打印!", vbOKCancel, "双面打印")
  41. ActiveSheet.PrintOut from:=b, To:=b
  42. Case Is >= 2 '③起始页和结束页之差超过1页。
  43. dPage = a
  44. For jPage = b - IIf(b Mod 2 = 0, 1, 0) To a Step -2
  45. ActiveSheet.PrintOut from:=jPage, To:=jPage
  46. Next
  47. OK = MsgBox("请把纸张装入打印机,打印偶数页", vbOKCancel, "双面打印")
  48. If OK = vbOK Then
  49. For dPage = a + IIf(a Mod 2 = 0, 0, 1) To b Step 2
  50. ActiveSheet.PrintOut from:=dPage, To:=dPage
  51. Next
  52. End If
  53. Case Is <= -2 '④起始页和结束页之差超过1页。这里灵活适应用户把起始页和结束页调转输入。
  54. dPage = b
  55. For jPage = a - IIf(a Mod 2 = 0, 1, 0) To b Step -2
  56. ActiveSheet.PrintOut from:=jPage, To:=jPage
  57. Next
  58. OK = MsgBox("请把纸张装入打印机,打印偶数页", vbOKCancel, "双面打印")
  59. If OK = vbOK Then
  60. For dPage = b + IIf(b Mod 2 = 0, 0, 1) To a Step 2
  61. ActiveSheet.PrintOut from:=dPage, To:=dPage
  62. Next
  63. End If
  64. End Select
  65. End Sub
复制代码

总结:本人经验浅,尽管可以正常运行,但总感觉以上的程序非常之复杂!希望有高人可以帮忙精简一下的同时保留所有功能吧。

TA的精华主题

TA的得分主题

发表于 2014-10-17 17:31 | 显示全部楼层
奇偶页打印,有时候是非常需需要的,谢谢分享

TA的精华主题

TA的得分主题

发表于 2014-10-27 11:04 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-10-27 22:46 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这个一定要试试。

TA的精华主题

TA的得分主题

发表于 2014-11-19 14:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
很有用的程序,学习了

TA的精华主题

TA的得分主题

发表于 2014-12-13 08:07 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-7-28 10:24 | 显示全部楼层
老师,请问下这句代码,咋不能得到工作表的总页数呢,总是等于1呀,
pageTotal = Application.ExecuteExcel4Macro("get.document(50)")
求大神解惑,谢谢!本人感觉很神,但就是用不了………………。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-31 15:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
1249994139 发表于 2016-7-28 10:24
老师,请问下这句代码,咋不能得到工作表的总页数呢,总是等于1呀,
pageTotal = Application.ExecuteExce ...

把你的文档发上来看看才知道了 正常来讲这个打印程序仅适合于 同一个工作表 需要多张纸打印出来用的

TA的精华主题

TA的得分主题

发表于 2016-9-2 10:37 | 显示全部楼层
谢谢各位老师的帮助,已经解决了.谢谢!

TA的精华主题

TA的得分主题

发表于 2019-8-9 12:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
打印出的奇数页是倒数,能改成正的吗?谢谢了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-25 20:30 , Processed in 0.033668 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表