VBA - 在代码中生成唯一数字
VBA - generating unique numbers in code
有什么方法可以在代码中生成唯一编号吗?
我有一个使用系统时间的想法,但最终无法实现。
您可以使用 Now()
然后将输出格式化为数字:
Sub unique()
Dim t As Date
t = Now()
Range("A1").NumberFormat = "@"
Range("A1") = CStr(Format(t, "yyyymmddhhMMss"))
End Sub
这将是独一无二的。
正如@Vasily 指出的那样,如果不将单元格格式化为字符串并将数字作为字符串,则值将被截断为科学记数法。
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
有什么方法可以在代码中生成唯一编号吗? 我有一个使用系统时间的想法,但最终无法实现。
您可以使用 Now()
然后将输出格式化为数字:
Sub unique()
Dim t As Date
t = Now()
Range("A1").NumberFormat = "@"
Range("A1") = CStr(Format(t, "yyyymmddhhMMss"))
End Sub
这将是独一无二的。
正如@Vasily 指出的那样,如果不将单元格格式化为字符串并将数字作为字符串,则值将被截断为科学记数法。
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