很抱歉,这是一个懒惰的问题,但找不到适合Google的简单答案。
下面的声明来自我发现的一些代码,这些代码使我看起来像个不错的vba GUID,但编译器给出了模糊的“未定义的用户类型”错误。想过可能将LongPtr更改为LongLong,但是没有好处。
如何获取此文件? Environmentt是Office 365 64位。谢谢!
'// Test for 32 or 64 bit Excel
#If VBA7 Then
Private Declare PtrSafe Function CoCreateGuid Lib "ole32.dll" (guid As GUID_TYPE) As LongPtr
Private Declare PtrSafe Function StringFromGUID2 Lib "ole32.dll" (guid As GUID_TYPE, ByVal lpStrGuid As LongPtr, ByVal cbMax As Long) As LongPtr
#Else
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 LongPtr, ByVal cbMax As Long) As Long
#End If
答案 0 :(得分:1)
大概是GUID_TYPE
UDT突出显示了。您需要使用Private Type
定义该结构:
Private Type GUID_TYPE
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type
还请注意,Test for 32 or 64 bit Excel
的注释极具误导性-VBA7
并不关心主机的位数,只关心Visual Basic for Applications版本(VBA6没有{{ 1}}类型或LongPtr
修饰符)。如果主机应用程序是64位的,则PtrSafe
预编译器常量(尽管其名称)将为Win64
(因此支持True
;位数取决于LongLong
的大小)