什么是 "Compile Error Cannot define a Public user-defined type within an object module"? : VBA

What is "Compile Error Cannot define a Public user-defined type within an object module"? : VBA

Compile error:

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

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

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

谢谢。

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

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

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

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

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

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