Excel如何实现表单编号自动递增? - sslshopper

时间:2024-03-04 17:41:31

Excel如何实现表单编号自动递增?

Excel经常被用作业务单据的制作,例如出库单,一个很现实的需求是表单自动编号,希望每次打印时编号会自动递增。
很幸运Excel能够支持自动编号的实现,网上的方法很多,但自己找了半天也没能成功实现。不过网上还是找到了些许灵感。
首先,要知道Excel提供了一个Workbook_BeforePrint事件,这个事件可以在打印或打印预览之前被执行,由于打印预览不是真正的打印,所以如果在 Workbook_BeforePrint这个事件中递增编号显然不对。怎么办呢?Excel有没有Workbook_AfterPrint事件呢?很遗憾没有。
要是能区分打印预览和打印就好了,然而区分几乎是不可能的,所以,我觉得将系统自带的打印和打印预览功能失效掉。
失效很简单,只要设置Cancel=true就可以了。
Private Sub Workbook_BeforePrint(Cancel As Boolean) Cancel = True End Sub
好,我已经将系统打印功能失效了,那么我就要自己编写打印的代码。不知道怎么写代码?没有关系,可以录制宏。
执行打印的命令是:ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
实现自动递增, Range("B1").Select ActiveCell.FormulaR1C1 = ActiveCell.FormulaR1C1 + 1

这里,我定义一个全局变量isPrint,在宏中设置,要打印时就设置成isPrint=true,这样我就可以事件中判断是否需要打印。

完整代码

Public isPrint As Boolean Sub Macro1()     isPrint = True     ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"     Range("B1").Select     ActiveCell.FormulaR1C1 = ActiveCell.FormulaR1C1 + 1 End Sub
Private Sub Workbook_BeforePrint(Cancel As Boolean)     Cancel = True     If isPrint = False Then Exit Sub     Cancel = False     isPrint = False End Sub