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

Jon*_*min 1 powerpoint vba

在此输入图像描述

Compile error:

Cannot define a Public user-defined type within an object module
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢。

Fun*_*mas 5

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

  • 常规模块 - 在这里输入 subs、函数、类型等代码
  • 用户表单 - 我想您知道用户表单是什么。它包含表单的布局和所谓的隐藏代码 - 即粘在表单上的所有代码,例如事件触发器。
  • 一个类模块。类是用户自己定义的类型。除了简单的 UDT(用户定义类型)之外,类还有自己的函数和子例程(是的,我知道,这是极其简化的)

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

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

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

如果您需要在多个模块中使用该类型,则需要将类型定义移动到常规模块中(这是 GSerg 在注释中写的内容)