【问题标题】:lib functions wont compilelib函数不会编译
【发布时间】: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 的大小)。

标签: excel vba


【解决方案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 没有 LongPtr 类型或PtrSafe 修饰符)。如果宿主应用程序是 64 位,则 Win64 预编译器常量(尽管它的名称)将为 True(因此支持 LongLong;位数决定了 LongPtr 的大小)。

【讨论】:

  • 是的,我有类型,但在复制的代码中它被称为“guid”而不是“GUID_TYPE”。并且编译器突出了声明,所以我没有把它放在一起。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多