VBA-在代码中生成唯一的数字
是否有任何方法可以在代码中生成唯一的数字? 我有一个使用系统时间的想法,但最终无法实现。您可以使用Now()将输出格式化为数字VBA-在代码中生成唯一的数字,vba,numbers,unique,Vba,Numbers,Unique,是否有任何方法可以在代码中生成唯一的数字? 我有一个使用系统时间的想法,但最终无法实现。您可以使用Now()将输出格式化为数字 Sub unique() Dim t As Date t = Now() Range("A1").NumberFormat = "@" Range("A1") = CStr(Format(t, "yyyymmddhhMMss")) End Sub 这将是独一无二的 正如@Vasily所指出的,如果不将单元格格式化为字符串并将数字作为sting,则值将被截断为科学符号
Sub unique()
Dim t As Date
t = Now()
Range("A1").NumberFormat = "@"
Range("A1") = CStr(Format(t, "yyyymmddhhMMss"))
End Sub
这将是独一无二的
正如@Vasily所指出的,如果不将单元格格式化为字符串并将数字作为sting,则值将被截断为科学符号 特别是在这种情况下,发明了GUID(全局唯一标识符)。它可能有点太大了。。。但你已经看到了:
Option Explicit
Public Type TYP_GUID
bytes(15) As Byte
End Type
Public Declare Function CoCreateGuid Lib "OLE32.dll" _
(guid As TYP_GUID) As Long
Public Function newGUID() As TYP_GUID
Dim uGUID As TYP_GUID
CoCreateGuid uGUID
newGUID = uGUID
End Function
无论何时调用newGUID(),您都将成为世界上真正独一无二的值。你可以试着随时给它打电话。。。您将永远不会第二次获得相同的值
还可以将此类GUID转换为字符串:
Option Explicit
Public Type TYP_GUID
bytes(15) As Byte
End Type
Public Declare Function CoCreateGuid Lib "OLE32.dll" _
(guid As TYP_GUID) As Long
Public Declare Function StringFromGUID2 Lib "OLE32.dll" _
(guid As TYP_GUID, _
ByVal lpszString As String, _
ByVal iMax As Long) As Long
Public Function newGUID() As TYP_GUID
Dim uGUID As TYP_GUID
CoCreateGuid uGUID
newGUID = uGUID
End Function
Public Function newGUID_String() As String
Dim sBuffer As String
Dim lResult As Long
sBuffer = VBA.Space(78)
lResult = StringFromGUID2(newGUID, sBuffer, Len(sBuffer))
newGUID_String = Left$(StrConv(sBuffer, vbFromUnicode), lResult - 1)
End Function
你需要多少位数?上下文是什么?此代码在完成之前是否生成唯一值?或者它是否按计划/间歇运行,并且在运行时需要生成唯一的值?例如,如果它一直运行到完成,只需生成一个变量,并在每次需要新变量时递增1。你能使用一个隐藏的工作表,并使用一个特定的单元格,每次你需要一个新的数字时都会增加它吗?我认为最好是
Cstr(Format(now(),“yyyymmddhhmmsms”)
@Vasily OP明确要求一个数字。格式(now(),“yyyyymmddhhmmsms”)
是一个字符串,不需要Cstr()
包装。我的意思是,如果您使用格式“yyyymmddhhmmsms”
为唯一标识符CDbl
减少数字范围,它将返回一个数字+16
,VBA没有bigint
(例如在SQL Server中),这就是为什么我的建议是使用字符串而不是数字。如果标识符是唯一的,则数字或字符串无关紧要。@Vasily啊,这很有意义。你说得对。在不将单元格格式化为字符串并将数字作为字符串放置的情况下,它将截断科学格式的数字。我编辑了答案。