zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    SVN使用教程总结
    SVN
    js中设置元素class的三种方法小结
    Javascript 删除tr 元素
    SQL Server执行计划的理解
    java多线程知识点汇总(四)多线程知识点脉络图
    hibernate将connection放进threadlocal里实现数据库连接池
    数据库连接池中是将connection放进threadlocal里的
    java jdbc深入理解(connection与threadlocal与数据库连接池和事务实)
    java项目怎样添加jar包依赖?
  • 原文地址:https://www.cnblogs.com/liuzhengdao/p/2101953.html
Copyright © 2011-2022 走看看