vba - 什么是“编译错误无法在对象模块中定义公共用户定义类型”?: VBA
问题描述
Compile error:
Cannot define a Public user-defined type within an object module
上述编译错误在 Visual Basic for Applications (VBA) 中是什么意思?
我想指出,完全相同的代码在单独的空 Powerpoint 文件中没有错误。
谢谢你。
解决方案
您需要了解 VBA 中不同类型的代码模块。基本上,你可以拥有
- 一个常规的模块——在这里你可以输入像 subs、functions、types 这样的代码
- 用户表单——我猜你知道用户表单是什么。它包含表单的布局和所谓的代码背后 - 即所有粘在表单上的代码,如事件触发器。
- 一个类模块。类是自己的、用户定义的类型。除了一个简单的 UDT(用户定义类型)之外,一个类还有它自己的函数和子例程(是的,我知道,这非常简化)
根据环境,您可以使用内置模块。在 Excel 中,这些是工作簿和工作表模块,在 Word 中是文档模块(据我所知,在 Powerpoint 中,没有内置模块)。
现在,除了常规模块之外,以上所有内容都定义了类(用户表单、工作表、工作簿、文档是特殊类型的类)。而且一个类不能包含公共类型(它已经是公共类型),就这么简单。这类似于不能在类型中定义类型的事实。
我假设您在用户表单代码中定义了您的类型。如果您只需要该表单中的类型,请将其声明为私有。允许在类中定义类型,但它们必须是私有的,换句话说,在项目的其他模块中未知的类型,因此,您不能拥有该类型的公共变量或公共函数返回该类型。
如果需要多个模块中的类型,则需要将类型定义移动到常规模块中(这是 GSerg 在评论中写的)
推荐阅读
- javascript - 如何以角度将 JSON 数组插入对象
- bash - 如何使用 BASH_REMATCH 捕获重复模式的最长匹配
- node.js - 无法在使用 Express 和 Azure Cosmos DB 的 Angular 应用程序中配置 MongoDB
- angular - 在应用程序模块以外的单独模块中找不到角度材质数据源
- swift - 我正在尝试展示 MVC 的示例,但它没有生成任何输出
- java - ansible 在远程主机的环境变量中找不到暴露的命令
- amazon-web-services - 我们可以将 AWS lambda 与 AWS IOT 集成并使用此 lambda 函数在 IOT 中执行操作吗?
- ubuntu - Gazebo 无法启动:Ubuntu 20.04 LTS
- html - 如何在闪亮的 HTML 中使用 & 符号?
- java - Apache POI - 尝试使用 POI 更改强调色