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


70

在VB6 / VBA中,可以在特定方法SubFunction方法之外声明模块级变量。我已经在模块中使用过Private并且Public之前了解过它们,如下所示:

  • Public -对模块内部的所有代码和模块外部的所有代码可见,从而使它成为全局代码。
  • Private -仅对模块内部的代码可见。

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

Answers:


96

DimPrivate工作原理相同,但共同的约定是使用Private在模块级,并且Dim在小组/功能水平。Public并且Global它们的功能几乎相同,但是Global只能在标准模块中使用,而Public可以在所有上下文(模块,类,控件,窗体等)中使用,它们均Global来自较旧的VB版本,并且可能是为了向后兼容而保留的,但是已被完全取代Public


感谢您的回答。您的解释几乎是我一直在想的。我从大量的旧代码开始,该代码具有在单个模块的声明部分中使用的所有四个修饰符。
本麦考马克

3
全局变量在执行后保持其值。
基里尔2015年

11
将您的评论与Excel 2010的联机帮助进行比较,可以发现以下几点:“使用公用语句声明的变量可用于所有应用程序中所有模块中的所有过程,除非Option Private Module有效;在这种情况下,变量仅在它们所在的项目中才是公共的。此外,请注意:不能在类模块中使用Public语句来声明固定长度的字符串变量,由于上述两种情况都是晦涩的用例,因此两者都不大可能是一个实际的问题,尽管如此,为了完整
David A. Gray

2
尽管该问题仅涉及模块级声明,但出于完整性(以及对于新手)的考虑,值得一提的是PrivatePublic甚至在过程内部也不允许这样做。在官方文件中的Private说法似乎有这方面的一个错字(这是几乎相同的,可能(从该文件复制)?Dim语句):“当你使用[原文如此]程序Private语句... “
Egalth
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.