I use this routine in almost every application I develop. It’s handy whether you need a key for a collection or whether you use it in a database:
Option ExplicitPrivate Declare Function CoCreateGuid Lib _ "OLE32.DLL" (pGuid As GUID) As LongPrivate Declare Function StringFromGUID2 Lib _ "OLE32.DLL" (pGuid As GUID, _ ByVal PointerToString As Long, _ ByVal MaxLength As Long) As Long' Private membersPrivate Const GUID_OK As Long = 0Private Type GUID Guid1 As Long Guid2 As Integer Guid3 As Integer Guid4(0 To 7) As ByteEnd TypePublic Function CreateGUIDKey() As String '*** Possible max length for buffer Const GUID_LENGTH As Long = 38 Dim udtGUID As GUID 'User Defined Type Dim strFormattedGUID As String 'The formatted string Dim lngResult As Long 'Useless result flag '*** Create a 'raw' GUID lngResult = CoCreateGuid(udtGUID) If lngResult = GUID_OK Then '*** Pre-allocate space for the ID strFormattedGUID = String$(GUID_LENGTH, 0) '*** Convert the 'raw' GUID to a 'formatted string StringFromGUID2 udtGUID, _ StrPtr(strFormattedGUID), GUID_LENGTH + 1 Else '*** Return nothing or handle error strFormattedGUID = "" End If ' *** Return our nicely formatted GUID CreateGUIDKey = strFormattedGUIDEnd Function