lib函数不会编译

时间:2019-08-19 20:31:30

标签: excel vba

很抱歉,这是一个懒惰的问题,但找不到适合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

1 个答案:

答案 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的大小)