刘政道 - 应用程序框架

《31天学会CRM项目开发(C#编程入门及项目实战)》作者,IT经理,程序员
  博客园  :: 新随笔  :: 联系 :: 管理

Excel如何实现自动编号?

Posted on 2011-07-09 21:02  刘政道  阅读(3517)  评论(0编辑  收藏  举报

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

 

最后需要的话,可以将宏加入到工具栏。