首页 > 解决方案 > 什么是“编译错误无法在对象模块中定义公共用户定义类型”?: VBA

问题描述

在此处输入图像描述

Compile error:

Cannot define a Public user-defined type within an object module

上述编译错误在 Visual Basic for Applications (VBA) 中是什么意思?

我想指出,完全相同的代码在单独的空 Powerpoint 文件中没有错误。

谢谢你。

标签: vbapowerpoint

解决方案


您需要了解 VBA 中不同类型的代码模块。基本上,你可以拥有

  • 一个常规的模块——在这里你可以输入像 subs、functions、types 这样的代码
  • 用户表单——我猜你知道用户表单是什么。它包含表单的布局和所谓的代码背后 - 即所有粘在表单上的代码,如事件触发器。
  • 一个类模块。类是自己的、用户定义的类型。除了一个简单的 UDT(用户定义类型)之外,一个类还有它自己的函数和子例程(是的,我知道,这非常简化)

根据环境,您可以使用内置模块。在 Excel 中,这些是工作簿和工作表模块,在 Word 中是文档模块(据我所知,在 Powerpoint 中,没有内置模块)。

现在,除了常规模块之外,以上所有内容都定义了类(用户表单、工作表、工作簿、文档是特殊类型的类)。而且一个类不能包含公共类型(它已经是公共类型),就这么简单。这类似于不能在类型中定义类型的事实。

我假设您在用户表单代码中定义了您的类型。如果您只需要该表单中的类型,请将其声明为私有。允许在类中定义类型,但它们必须是私有的,换句话说,在项目的其他模块中未知的类型,因此,您不能拥有该类型的公共变量或公共函数返回该类型。

如果需要多个模块中的类型,则需要将类型定义移动到常规模块中(这是 GSerg 在评论中写的)


推荐阅读