помогите адаптировать код см.ниже что бы работал на 64 битной системе
Код
Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End Type
Private Declare Function CoCreateGuid Lib "ole32" (pguid As GUID) As Long
Private Declare Function StringFromGUID2 Lib "ole32" ( _
rguid As GUID, ByVal lpsz As Long, ByVal cchMax As Long) As Long
Public Function CreateGUID() As String
Dim NewGUID As GUID
CoCreateGuid NewGUID
CreateGUID = Space$(38)
StringFromGUID2 NewGUID, StrPtr(CreateGUID), 39
End Function
если можно с комментариями, спасибо.
пробую вот так
Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End Type
#If Win64 Then
Private Declare PtrSafe Function CoCreateGuid Lib "ole32" (pguid As GUID) As LongPtr
Private Declare PtrSafe Function StringFromGUID2 Lib "ole32" ( _
rguid As GUID, ByVal lpsz As Long, ByVal cchMax As Long) As LongPtr
#Else
Private Declare Function CoCreateGuid Lib "ole32" (pguid As GUID) As Long
Private Declare Function StringFromGUID2 Lib "ole32" ( _
rguid As GUID, ByVal lpsz As Long, ByVal cchMax As Long) As Long
#End If
Public Function CreateGUID() As String
Dim NewGUID As GUID
CoCreateGuid NewGUID
CreateGUID = Space$(38)
StringFromGUID2 NewGUID, StrPtr(CreateGUID), 39
End Function
Sub dfvfb()
Dim GUID
GUID = LCase(Mid(CreateGUID(), 2, 36))
MsgBox GUID
End Sub
Вот такая адаптация. Я использую #If VBA7. Это нужно для работы с версиями "Excel 2007-". И внес только одно изменение:
Код
ByVal lpsz As LongPtr
Все остальное не менял.
Скрытый текст
Код
#If VBA7 Then
Private Declare PtrSafe Function CoCreateGuid Lib "ole32" (pguid As GUID) As Long
Private Declare PtrSafe Function StringFromGUID2 Lib "ole32" ( _
rguid As GUID, ByVal lpsz As LongPtr, ByVal cchMax As Long) As Long
#Else
Private Declare Function CoCreateGuid Lib "ole32" (pguid As GUID) As Long
Private Declare Function StringFromGUID2 Lib "ole32" ( _
rguid As GUID, ByVal lpsz As Long, ByVal cchMax As Long) As Long
#End If
Потому что в этом месте происходила ошибка "несоответствие типов". Значит Long не подходит для 64, остается LongLong. Но записать LongLong нельзя, т.к. перестанет работать в 32. Поэтому нужно вместо LongLong написать LongPtr.
Сейчас подумал и что-то я запутался в VBA7 и Win64. На первый взгляд и такой вариант подойдет с Win64:
Код
#If Win64 Then
Private Declare PtrSafe Function CoCreateGuid Lib "ole32" (pguid As GUID) As Long
Private Declare PtrSafe Function StringFromGUID2 Lib "ole32" ( _
rguid As GUID, ByVal lpsz As LongLong, ByVal cchMax As Long) As Long
#Else
Private Declare Function CoCreateGuid Lib "ole32" (pguid As GUID) As Long
Private Declare Function StringFromGUID2 Lib "ole32" ( _
rguid As GUID, ByVal lpsz As Long, ByVal cchMax As Long) As Long
#End If