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