Modulkonstanten in VBA
Am Anfang einer Konstantendeklaration kann der Modifizierer "Public" oder der Modifizierer "Private" verwendet werden, um festzulegen, daß der die Konstanten in allen Modulen bzw. nur in ihrem Modul sichtbar sein sollen.
- 〈ConstDeclaration 〉 ::=
- ( "Public" | "Private" ) "Const" 〈Bezeichner 〉 ["As" 〈Typ 〉] "=" 〈Ausdruck 〉 〈Vers-Ende 〉.
Modulkonstanten
Ein Modul kann neben Unterprogrammen und Funktionen auch Modulkonstanten enthalten. Damit kann beispielsweise ein Modul mit mathematischen Konstanten realisiert werden. Die Konstantendeklaration ist in diesem Fall noch das Schlüsselwort "public" vorangestellt, damit sie von anderen Modulen aus sichtbar ist. Soll eine Konstante nur innerhalb eines Moduls verwendet werden, so wäre das Schlüsselwort "Private" anstelle des Schlüsselworts "Public" zu verwenden.
In dem Modul "MathValue" werden beispielsweise zwei Konstanten definiert, die dann von Klienten der Klasse verwendet werden kann. Für das folgende Beispiel wird davon ausgegangen, daß dieses Modul in dem Projekt "tut" (von tutorial [Lehrtext]) enthalten ist. (Das Projekt "tut" muß den Verweisen des Projektes von "Modul1" hinzugefügt werden, damit die Bezeichner des Projekts "tut" erreichbar sind.)
tut.MathValue
Public Const pi As Double = 3.1415926535897932384626433832795028841972
Public Const e As Double = 2.7182818284590452353602874713526624977572Modul1
Sub Beispiel()
Debug.Print "Der Umfang eines Kreises mit dem Radius 9.8 ist ";
Debug.Print Format( 2 * tut.MathValue.pi * 9.8, "#.00" );
Debug.Print "."
End SubDirektbereich
Der Umfang eines Kreises mit dem Radius 9.8 ist 61,58.
Man kann das Modul "tut.MathValue" auch als einen Verbund (eine Zusammenfassung) zweier Konstanten ansehen. Solch ein Verbund von Daten wird auch als eine Aggregat bezeichnet.
Private Sichtbarkeit
Wenn eine Modulkonstante nur von Unterprogrammen und Funktionen ihres Moduls verwendet werden soll, dann sollte sie als „privat“ gekennzeichnet werden, um so ihre Sichtbarkeit auf ihr Modul einzuschränken.
Das Klasse "tut.PhysValue" veröffentlicht über sein Schnittstelle aus zwei Funktionen den Zahlenwert der Lichtgeschwindigkeit in Meter pro Sekunde bzw. in Kilometer pro Stunde. Um die für die Berechnung nötigen Werte nicht in den beiden Methodendeklarationen wiederholen zu müssen, werden Konstanten mit den benötigten Werten in der Klasse definiert. Diese Konstanten sollen aber nicht nach außen sichtbar werden, damit sie bei Bedarf jederzeit verändert werden können, ohne daß dies die Klienten stört. Daher werden die Konstanten als Modul-intern gekennzeichnet.
tut.PhysValue
'' Gelegentlich benoetigte physikalische Werte
Private Const m As Double = 1 '' Das Meter
Private Const s As Double = 1 '' Die Sekunde
Private Const km As Double = 1000 * m '' Der Kilometer
Private Const h As Double = 60 * 60 * s '' Die Stunde
Private Const c As Double = 299792458 * m / s '' Die Lichtgeschw.
Public Function c_ms() As Double
c_ms = c /( m / s )
End Function
Public Function c_kmh() As Double
c_kmh = c /( km / h )
End FunctionModul1
Sub Beispiel1()
Debug.Print "Die Lichtgeschwindigkeit beträgt ";
Debug.Print Format( tut.PhysValue.c_ms(), "#.00" );
Debug.Print " m/s oder ";
Debug.Print Format( tut.PhysValue.c_kmh(), "#.00" );
Debug.Print " km/h."
End SubDirektbereich
Die Lichtgeschwindigkeit beträgt 299792458,00 m/s oder 1079252848,80 km/h.
Es ist vom Unterprogramm "Beispiel" aus nun nicht möglich, auf die privaten Modulkonstanten des Moduls "tut.PhysValue" zuzugreifen, nur die beiden Modulfunktionen können aufgerufen werden.
Die Angabe "Private" kann vor der Deklaration einer Modulkonstante auch entfallen, da dies (d.h. die private Sichtbarkeit) die Vorgabe ist, die dann für die Sichtbarkeit übernommen wird.