【发布时间】:2019-08-20 04:52:51
【问题描述】:
很抱歉这个问题看起来很懒惰,但没有找到应该是一个简单的 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
【问题讨论】:
-
您是否添加了
GUID_TYPE代码?该链接中代码的第 11-17 行。 -
仅供参考
VBA7不关心主机的位数,只关心 Visual Basic for Applications 的版本(VBA6 没有LongPtr类型或PtrSafe修饰符)。如果主机应用程序是 64 位的,Win64(尽管它的名字)将是True(因此支持LongLong;位数决定了LongPtr的大小)。