Esta duda se puede solucionar de diversas formas, pero en este caso te enseñamos la que en nuestra opinión es la respuesta más completa.
Solución:
La siguiente expresión de Excel se evalúa como un GUID V4:
=CONCATENATE(DEC2HEX(RANDBETWEEN(0,4294967295),8),"-",DEC2HEX(RANDBETWEEN(0,65535),4),"-",DEC2HEX(RANDBETWEEN(16384,20479),4),"-",DEC2HEX(RANDBETWEEN(32768,49151),4),"-",DEC2HEX(RANDBETWEEN(0,65535),4),DEC2HEX(RANDBETWEEN(0,4294967295),8))
-o (según la configuración regional/separadores decimales y de lista)-
=CONCATENATE(DEC2HEX(RANDBETWEEN(0;4294967295);8);"-";DEC2HEX(RANDBETWEEN(0;65535);4);"-";DEC2HEX(RANDBETWEEN(16384;20479);4);"-";DEC2HEX(RANDBETWEEN(32768;49151);4);"-";DEC2HEX(RANDBETWEEN(0;65535);4);DEC2HEX(RANDBETWEEN(0;4294967295);8))
Tenga en cuenta que el primer carácter del tercer grupo siempre es 4 para indicar un GUID/UUID V4 (número pseudoaleatorio generado) según RFC 4122, sección 4.4.
También tenga en cuenta que el primer carácter del cuarto grupo siempre está entre 8 y B según el mismo RFC.
Descargo de responsabilidad estándar: los GUID/UUID resultantes no son criptográficamente fuertes.
Usé la siguiente función en v.2013 excel vba para crear un GUID y funciona bien.
Public Function GetGUID() As String
GetGUID = Mid$(CreateObject("Scriptlet.TypeLib").GUID, 2, 36)
End Function
Sé que esta pregunta está respondida, pero creo que el código en cuestión debería parecerse a lo que hay en esta página: http://snipplr.com/view/37940/
No lo he probado, pero este código parece aprovechar la API de Windows para obtener sus GUID. Intentaría poner eso en un módulo público y escribir =GetGUId()
en una celda de Excel para ver lo que obtendría. Si funciona en VB6, tiene muchas posibilidades de que también funcione en VBA:
Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type
Private Declare Function CoCreateGuid Lib "OLE32.DLL" (pGuid As GUID) As Long
Public Function GetGUID() As String
'(c) 2000 Gus Molina
Dim udtGUID As GUID
If (CoCreateGuid(udtGUID) = 0) Then
GetGUID = _
String(8 - Len(Hex$(udtGUID.Data1)), "0") & Hex$(udtGUID.Data1) & _
String(4 - Len(Hex$(udtGUID.Data2)), "0") & Hex$(udtGUID.Data2) & _
String(4 - Len(Hex$(udtGUID.Data3)), "0") & Hex$(udtGUID.Data3) & _
IIf((udtGUID.Data4(0) < &H10), "0", "") & Hex$(udtGUID.Data4(0)) & _
IIf((udtGUID.Data4(1) < &H10), "0", "") & Hex$(udtGUID.Data4(1)) & _
IIf((udtGUID.Data4(2) < &H10), "0", "") & Hex$(udtGUID.Data4(2)) & _
IIf((udtGUID.Data4(3) < &H10), "0", "") & Hex$(udtGUID.Data4(3)) & _
IIf((udtGUID.Data4(4) < &H10), "0", "") & Hex$(udtGUID.Data4(4)) & _
IIf((udtGUID.Data4(5) < &H10), "0", "") & Hex$(udtGUID.Data4(5)) & _
IIf((udtGUID.Data4(6) < &H10), "0", "") & Hex$(udtGUID.Data4(6)) & _
IIf((udtGUID.Data4(7) < &H10), "0", "") & Hex$(udtGUID.Data4(7))
End If
End Function
¡Gracias Gus Molina!
Si este código funciona (que no lo dudo), creo que obtendrá un nuevo conjunto de GUID cada vez que se evalúe la función, lo que significa que cada vez que se calcule la hoja, cuando esté guardando el libro de trabajo, por ejemplo. Asegúrese de copiar y pegar valores especiales si necesita los GUID para su uso posterior... lo cual es algo probable.