《Excel VBA編程開發》附加內容1:VBA生成GUID


 

1.1 VBA生成GUID

全局唯一標識符(GUID,Globally Unique Identifier)是一種由算法生成的二進制長度為128位的數字標識符。GUID主要用於在擁有多個節點、多台計算機的網絡或系統中。在理想情況下,任何計算機和計算機集群都不會生成兩個相同的GUID。GUID 的總數達到了2^128(3.4×10^38)個,所以隨機生成兩個相同GUID的可能性非常小,但並不為0。所以,用於生成GUID的算法通常都加入了非隨機的參數(如時間),以保證這種重復的情況不會發生。

GUID一詞有時也專指微軟對UUID標准的實現。

在 Windows 平台上,GUID 廣泛應用於微軟的產品中,用於標識如注冊表項、類及接口標識、數據庫、系統目錄等對象。

GUID 的格式為“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每個 x 是 0-9 或 a-f 范圍內的一個十六進制數。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即為有效的 GUID 值。

本節介紹VBA中生成GUID的方法

1.1.1 使用ScriptLet生成GUID

在VBA工程中添加引用“Microsoft ScriptLet Library”。

 

 

 Sub 生成GUID()

    Dim MyGUID As String

    Dim Lib As Scriptlet.IGenScriptletTLib

    Set Lib = CreateObject("Scriptlet.Typelib")

    MyGUID = Lib.GUID

    Debug.Print MyGUID

    Debug.Print LCase(Mid(MyGUID, 2, 36))

End Sub

運行上述代碼,立即窗口打印出帶花括號和不帶花括號的兩種形式的GUID,根據需要選擇使用。 

 

 

 然而,在很多電腦上運行上述代碼,當運行至CreateObject那行時,經常出現如下錯誤。

 

 

 這種情況下,使用API函數更為可靠。

1.1.2 使用API函數生成GUID

Private Type GUID_TYPE

    Data1 As Long

    Data2 As Integer

    Data3 As Integer

    Data4(7) As Byte

End Type

Private Declare Function CoCreateGuid Lib "OLE32.DLL" (GUID As GUID_TYPE) As Long

Private Declare Function StringFromGUID2 Lib "OLE32.DLL" (GUID As GUID_TYPE, ByVal lpStrGuid As Long, ByVal cbMax As Long) As Long

 

Sub API生成GUID()

    Dim GT As GUID_TYPE

    Dim MyGUID As String

    Call CoCreateGuid(GT)

    MyGUID = String(39, vbNullChar)

    Call StringFromGUID2(GT, StrPtr(MyGUID), 39)

    Debug.Print MyGUID

    Debug.Print LCase(Mid(MyGUID, 2, 36))

End Sub

運行上述代碼,同樣打印出新的GUID。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM