Dim,Global,Public和Private作为模块化字段访问修饰符有什么区别?

Ben*_*ack 67 vb6 vba scope access-modifiers

在VB6/VBA中,您可以在特定SubFunction方法之外声明模块级变量.我用PrivatePublic前内部模块和理解他们,像这样:

  • Public - 模块内的所有代码和模块外的所有代码都可见,实际上使其成为全局代码.
  • Private - 仅对模块内的代码可见.

我注意到你可以使用DimGlobal作为模块变量的修饰符.是DimGlobal从不同Private,并Public分别作为模块化领域访问修饰符使用时?如果是这样,他们有什么不同?

Joe*_*dan 91

Dim并且Private工作方式相同,但常见的惯例是Private在模块级别和Dim子/功能级别使用.Public并且Global它们的功能几乎相同,但是Global只能在标准模块中使用,而Public可以在所有上下文中使用(模块,类,控件,表单等)Global来自旧版本的VB并且可能保持向后兼容性,但是已被完全取代Public.

  • 将您的评论与Excel 2010的在线帮助进行比较可以发现一些非常好的观点:"使用Public语句声明的变量可用于所有应用程序中所有模块中的所有过程,除非Option Private Module生效;在这种情况下,变量只有在它们所在的项目中才是公共的.此外,注意:Public语句不能在类模块中用于声明一个固定长度的字符串变量.由于上述两个都是模糊的用例,因此不可能但是,为了完整起见,这是一个实际问题. (11认同)
  • 全局变量在执行后保留该值. (3认同)
  • 尽管这个问题只涉及模块级的声明,但是出于完整性(以及对于新手)的考虑,值得一提的是过程中甚至不允许使用“ Private”和“ Public”。“私人”声明的[官方文档](https://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/private-statement)似乎有错字这方面(它与`Dim`语句的文档几乎相同,并且很可能是复制的?):“在[sic!]过程中使用Private语句时...” (2认同)