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