Я знаю, что на этот вопрос дан ответ, но я думаю, что рассматриваемый код должен выглядеть примерно так, как на этой странице: http://snipplr.com/view/37940/
Не тестировался, но этот код, похоже, подключается к Windows APIчтобы получить его GUID - я бы попробовал поместить его в открытый модуль и набрать =GetGUId()
в ячейке Excel, чтобы посмотреть, что я получу.Если он работает в VB6, у вас есть большие шансы, что он работает и в 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
Спасибо, Гас Молина!
Если этот код работает (чего я не делаюсомневаюсь), я думаю, вы получите новый набор GUID всякий раз, когда функция будет оценена, что означает каждый раз, когда вычисляется лист - например, когда вы сохраняете книгу.Обязательно скопируйте-pastespecial-values, если вам нужны GUID для дальнейшего использования ... что вполне вероятно.