什么是 "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 在评论中写的)
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 在评论中写的)