【问题标题】:How do I work with user-defined types?如何使用用户定义的类型?
【发布时间】:2017-01-02 19:04:47
【问题描述】:

每次我尝试将 UDT 传递给其他函数时,我都会收到此编译错误:“只有在公共对象模块中定义的用户定义类型才能强制转换为变体或从变体强制转换或传递给后期绑定函数。”

我测试过的唯一一个使用 UDT 作为参数的内部函数是 VarPtr。我什至不能使用 TypeName 或 VarType。

有没有办法将 UDT 作为不明确期望特定类型的参数传递?有点像 Variant,但用于 UDT。

我还想将 UDT 存储在数组/字典/集合中,但这似乎也有问题。 UDT 听起来非常适合我的需求(不必有单独的类模块),但似乎它们的类型非常严格(如果这是正确的术语的话)。

编辑:看起来 VarPtr 期望参数为“Any”类型,所以这可能是接受 Variants 和 UDT 的类型。问题是,Excel 中内置的 VBA IDE 不允许我使用该类型。

【问题讨论】:

  • 不必有单独的类模块。您没有阅读错误信息吗?
  • 所有这些都已经在一个模块中,而不是一个类模块中。我想在一个模块中定义所有内容,而不是多个。
  • 通过对自己施加这种约束,你正在向一个受伤的世界敞开大门
  • 阅读错误信息。它是特定的 “只有在公共对象模块中定义的用户定义类型才能强制转换为变体或从变体强制转换或传递给后期绑定函数。”
  • 那么什么是公共对象模块?不是普通的模块吗?

标签: vba excel vbscript user-defined-types


【解决方案1】:

因此,您只能在声明它们的模块中使用 UDT,因此很可能您在一个模块中声明了 UDT,而当另一个模块中的函数尝试使用您的 UDT 时,就会生成错误...

我认为根据您的问题,您正在寻找类似于 UDT 的自定义类,但它们可以在您的整个项目中使用,甚至可以作为参数传入和传出您正在寻找的函数。

希望这会有所帮助- 丝绸代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多