Excel宏使用当前月份、年份和编号自动生成ID

Excel宏使用当前月份、年份和编号自动生成ID,excel,vba,Excel,Vba,我试图在单击“添加”按钮后创建自动生成的字符串。 字符串由当前年份、月份和序列组成。 yymm=140501 其中表示该月的数字。 如果我在同一个月再次单击“添加”,则为140502。 所以最后2个数字是递增的,后面是140503、140504、140505 下个月,当我点击“添加”时,它应该是140601140602 对于新月份,最后2个数字计数重置为1。 我试过一点: Sub AutoID() Dim autoid1 As String Dim intLastRow As Long For

我试图在单击“添加”按钮后创建自动生成的字符串。 字符串由当前年份、月份和序列组成。 yymm=140501 其中表示该月的数字。 如果我在同一个月再次单击“添加”,则为140502。 所以最后2个数字是递增的,后面是140503、140504、140505

下个月,当我点击“添加”时,它应该是140601140602 对于新月份,最后2个数字计数重置为1。 我试过一点:

Sub AutoID()
Dim autoid1 As String
Dim intLastRow As Long

For i = 1 To 100
autoid1 = "FT" & Format(Date, "yymm") & i

Next

End Sub

这将创建您想要的数字,但一旦静态变量被取消作用域,它将失去记忆该月最后一个数字的能力,或者它是否是新的月份

Sub Test()

Dim i As Long

For i = 1 To 10
    Debug.Print NewID
Next i

End Sub


Public Function NewID() As String

Dim m As String, y As String
Static inclNum As Integer
Static lastMonth As Integer

inclNum = inclNum + 1
m = Format(Date, "mm")
y = Format(Date, "yy")

If lastMonth = 0 Then lastMonth = CInt(m)

If CInt(m) <> lastMonth Then
    lastMonth = CInt(m)
    inclNum = 1
End If

NewID = CStr(inclNum)

If Len(NewID) < 2 Then NewID = "0" & NewID

NewID = y & m & NewID


End Function

您需要在某个地方输入当前序列号:在隐藏的工作表中或例如在工作簿名称中,其中名称为yymm,值为当前/下一个序列号。请告诉我您是如何生成这些数字的-是一次性生成的,还是需要一个其他人可以打开并使用的生成器?是因为您有一个报告和日期列表,并且希望为每个报告和日期生成一个id,还是因为报告是动态生成的,并且在工作簿关闭时需要保留最后一个值?如果是这样,每次调用函数时,只需将最新值写入xlVeryHidden数据表的单元格A1,并将生成该数字的月份写入B1。然后,您可以先检查是否是新月份,然后重置或添加