vba modulübergreifende - Was ist der Unterschied zwischen Dim, Global, Public und Private als Modular Field Access Modifiers?




variable declare (2)

Dim und Private funktionieren gleich, obwohl die allgemeine Konvention Private auf der Modulebene und Dim auf der Sub / Function-Ebene ist. Public und Global sind in ihrer Funktion fast identisch, Global kann jedoch nur in Standardmodulen verwendet werden, während Public in allen Kontexten (Module, Klassen, Controls, Formulare etc.) verwendet werden kann. Global stammt aus älteren Versionen von VB und wurde wahrscheinlich beibehalten aus Gründen der Abwärtskompatibilität, wurde jedoch vollständig von Public .

In VB6 / VBA können Sie Variablen auf Modulebene außerhalb einer bestimmten Sub oder Function deklarieren. Ich habe Private und Public vor internen Modulen verwendet und verstehe sie so:

  • Public - sichtbar für alle Codes innerhalb des Moduls und für alle Codes außerhalb des Moduls, wodurch es im Wesentlichen global ist.
  • Private - Nur sichtbar, um innerhalb des Moduls zu codieren.

Ich habe bemerkt, dass Sie Dim und Global als Modifikatoren für modulare Variablen verwenden können. Sind Dim und Global anders als Private und Public , wenn sie als Zugriffsmodifikatoren für modulare Felder verwendet werden? Wenn ja, wie unterscheiden sie sich?


Der private Bereich bezieht sich auf die vorhandene Klasse. Wherein Protected kann innerhalb von Paketen und Klassen um Klassen in anderen Paketen erweitert werden.

Wenn Sie möchten, dass Ihre Variablen / Methoden Zugriff außerhalb des Pakets haben, müssen Sie diese als geschützt / öffentlich definieren, andernfalls als privat oder als andere Zugriffsspezifizierer.

Geschützte Methoden sind normalerweise von außerhalb des Pakets und innerhalb von Unterklassen zugänglich, dh eine Klasse muss die jeweilige Klasse auf avail-geschützte definierte Methoden erweitern.

Private Methoden / Variablen haben Gültigkeit innerhalb der Klasse. Sie können nicht außerhalb der Klasse zugänglich sein.

Daher können Sie Private Protected nicht gleichzeitig definieren!





vba vb6 scope access-modifiers