有时,您可能需要Excel为工作表生成一个唯一的编号。例如,您可能正在使用Excel创建表格,例如http://www.formville.com/C2_free-invoice-forms.html [发票],报表或跟踪表,并且每种表格都需要唯一的编号(我称它为“ 机票编号”。当然,这意味着Excel需要记住从一个会话到下一个会话的编号。

有两种方法可以解决此问题。如果号码不必是连续的,则可以根据当前时间(以秒为单位)创建票证号码。可以将以下宏添加到ThisWorksheet对象:

Private Sub Workbook_NewSheet(ByVal Sh As Object)

Dim lTicket As Long     lTicket = CLng(Time  24  60 * 60)

Sh.Range("A1") = lTicket End Sub

每次将新工作表添加到工作簿时,都会触发该宏。它需要当前时间,将其转换为整数秒,然后将该值放入单元格A1中。在任何给定的日期内复制票号的可能性很小,但随着时间的流逝可能会发生。 (例如,如果您在今天或昨天或上周的同一时间创建票证。)

要解决此问题,您可以按以下方式创建票证编号:

Private Sub Workbook_NewSheet(ByVal Sh As Object)

Dim sTemp As String     sTemp = Format(Date, "yymmdd") & Format(Time, "hhmmss")

Sh.Range("A1") = sTemp End Sub

此版本的事件处理程序会根据日期和时间构造票证编号。除非您非常快速地创建票证,否则这种方法应该减少由宏生成重复编号的可能性。

如果这些数字在当前工作簿中必须是连续的,则可以定义一个名称,其中包含票证号码的当前高值,然后定义一个宏,该宏将该数字放置在新工作表的单元格中并递增存储的值数。请按照以下步骤开始:

。从“插入”菜单中选择“名称”,然后选择“定义”。 Excel将显示“定义名称”对话框。 (请参见图1。)

。在“名称”框中,输入一个名称,例如MaxNum。

。在对话框底部的“引用到”区域中,输入等号,然后输入要用于下一个票证编号的值。

。单击确定。新名称存储在工作簿中。

现在,将以下宏添加到VBA编辑器中的ThisWorksheet对象中:

Private Sub Workbook_NewSheet(ByVal Sh As Object)

Dim iMax As Integer     iMax = Mid(ThisWorkbook.Names("MaxNum"), 2)

Sh.Range("A1") = iMax     iMax = iMax + 1     ThisWorkbook.Names("MaxNum").RefersTo = "=" & iMax End Sub

每次您在工作簿中插入新工作表时,都会执行此宏。它检索您存储在MaxNum中的值,将该值放入新工作表的单元格A1中,然后递增存储在MaxNum中的值。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(3336)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: