资源描述:
《利用宏实现奇数偶数及正反打印》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、VBA宏打印奇数偶数页并实现正反打印宏打印奇数偶数页并实现正反打印SubaTry()Dimi%,Ps%Ps=ExecuteExcel4Macro("GET.DOCUMENT(50)")'总页数MsgBox"现在打印奇数页,按确定开始."Fori=1ToPsStep2activesheet.PrintOutfrom:=i,To:=iNextiMsgBox"现在打印偶数页,按确定开始."Fori=2ToPsStep2activesheet.PrintOutfrom:=i,To:=iNextiEndSub大家都知道Word里面有一项
2、设置可以让我们选择打印奇数页还是偶数页,这样我们很容易就实现了Word的正反打印,Excel中貌似找不到这个选项,如果你的打印机支持的话,你可以通过页面设置,工作表选项卡,选项按钮,切换到完成方式,可能会有奇数偶数或者正反打印,当然这一切取决于你的打印机驱动是否支持,如果找不到,那该怎么办呢?难道只能手动打印吗?其实我们可以利用VBA宏变通一下的,首先获取总页数,奇数页打印也就是从1开始,然后1、3、5、7、9,步长为2,利用VB语言可以描述如下:'TotalPages就是总页数'Step是计算步长,这里i每次加2Fori=1
3、ToTotalPagesStep2'打印i页Nexti这里很明显将打印1、3、5、7、9这样的奇数页,如果是2、4、6、8、10这样的偶数页该怎么办呢,可以看出步长依旧是2,只是起始从2开始了,那么i初始应该设置为2。通过PrintOut方法就能进行打印了,这里我们默认打印选中的Sheet,所以使用ActiveWindow.SelectedSheets:'TotalPages就是总页数'Step是计算步长,这里i每次加2'打印奇数页Fori=1ToTotalPagesStep2ActiveWindow.SelectedShee
4、ts.PrintOutFrom:=i,To:=iNexti为了通用,我们将上面的方法封装成一个Sub过程:'StartPage要打印的起始页'TotalPages要打印的总页数'SkipPages每次打印跳过的页数SubPrintSheet(ByValStartPageAsInteger,_ByValTotalPagesAsInteger,_ByValSkipPagesAsInteger)Fori=StartPageToTotalPagesStepSkipPages+1ActiveWindow.SelectedSheets.P
5、rintOutFrom:=i,To:=iNextiEndSub这里步长为了便于理解被我改为SkipPages,跳过的页数,比如步长2,也就是说每次跳过1页。好,到这里基本上是万事俱备只欠东风了,这个东风也就是如何获取打印的总页数,其实我们可以通过Excel内置宏GET.DOCUMENT获取,其中参数是50,表明“当前设置下欲打印的总页数,其中包括注释,如果文件为图表,值为1”。调用内置宏,通过ExecuteExcel4Macro方式,也就是总页数如下:TotalPages=ExecuteExcel4Macro("Get.Doc
6、ument(50)")总页数有了,下面就是奇数页,偶数页打印的方法了:'奇数页SubPrintOddPages()TotalPages=ExecuteExcel4Macro("Get.Document(50)")PrintSheet1,TotalPages,1EndSub'偶数页SubPrintEvenPages()TotalPages=ExecuteExcel4Macro("Get.Document(50)")PrintSheet2,TotalPages,1EndSub接下来就是如何打印正反面了,其实我们先让打印机打印正面,
7、正面是1、3、5、7、9这样的奇数页,然后暂停打印,将纸张翻过来,再让打印机打印偶数页,看似没有什么问题,实际上,纸张翻过来打印偶数页时必须从大到小打印,也就是说类似于10、8、6、4、2这样的顺序,其实我们只需要设置起始页为总页数,结束页为2,步长为-2就可以了,将原来的PrintSheet函数修改一下:'StartPage要打印的起始页'TotalPages要打印的总页数'SkipPages每次打印跳过的页数'Invert是否逆序SubPrintSheet(ByValStartPageAsInteger,_ByValTot
8、alPagesAsInteger,_ByValSkipPagesAsInteger,_ByValInvertAsBoolean)DimsAsIntegers=IIF(Invert,-(SkipPages+1),SkipPages+1)Fori=StartPageToTotal