生成工作表的唯一编号(Microsoft Excel)
有时,您可能需要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培训的来源。
本技巧(11192)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。您可以在此处为Excel的较早菜单界面找到此技巧的版本: