VBA循环打印对账单时,循环一次发出一个打印命令(本应用只打印一页),导致打印速度很慢,时间都浪费在电脑与打印机握手上面了。要解决这个问题,一种方法是打印前将内容合并,另一种方法是输出到文件,然后合并打印。最好的方法当然是第一种,但有时无法在打印前合并内容,例如打印内容涉及图片、条码、二维码、套打等,那么只有采用第二种方法。
为了增加灵活性,程序设置了一个输出参数pm,内容定义如下:
输出:0=到打印机;其它(n)=按n*100分组到文件
之所以要进行分组,是因为如果要打印的记录太多,合并的文件太多,合并的速度也慢。
If pm = 0 Then
ActiveSheet.PrintOut
Else
pn = Int((rr - rr1) / (pm * 100))
pdf = ThisWorkbook.Path & "\pdf" & pn
If pm <> 0 And Dir(pdf, vbDirectory) = vbNullString Then
MkDir pdf
End If
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdf & "\对账单" & Format(rr, "000000") & ".pdf"
End If
这个输出到pdf的语句ExportAsFixedFormat到2010版本才是可以用的,2007则不行。合并pdf就简单了,用什么合并工具都行,比如下图所示的Adobe Acrobat 8 Professional:
最后,网上看到有人说安装一个PdfFactory Pro虚拟打印机,在页面设置中指定它为当前打印机,它与内置的pdf打印印机不同,会把打印的内容合成一个PDF文件。这个方法也挺好,不过我没试过,可以试试。
顺便说一下,Office 2010发布了32位版本和64位版本。VBA由版本6升级到版本7,VBA7随Office 2010发布,支持能够运行32位和64位Office的代码的开发。参见:32 位和 64 位版本的 Office 2010 之间的兼容性