Qualifizierte Namen in VBA
Die folgende Eingabe wurde schon behandelt.
- Direktbereich
? "a" & vbNewLine & "b"
a
b
Dasselbe kann aber auch folgendermaßen geschrieben werden:
- Direktbereich
? "a" & VBA.Constants.vbNewLine & "b"
a
b
Im folgenden sollen nun Namen wie »VBA.Constants.vbNewLine«, näher beschrieben werden.
Syntax
Bezeichner (einfache Namen)
Ein einfacher Name oder Bezeichner, wie beispielsweise »vbNewLine«, ist (etwas vereinfacht gesagt) eine Folge von Zeichen, die mit einem Buchstaben beginnt, dem Buchstaben, Grundstriche oder Ziffern direkt folgen können.
Ein Bezeichner ist eine lexikalische Einheit.
- Bezeichner
a
A
Haus
Haus2
HAUS_2- Morphologische Diagramme (vereinfacht)
Bezeichner .----------------------------------------.
.-----------. | .-----------------------. v
|-|--->| Buchstabe |---'---.--->| Bezeichnerrestzeichen |---:---'--->|-|
'-----------' ^ '-----------------------' |
'--------------------------------'Bezeichnerrestzeichen
.---------------.
|-|---.--->| Buchstabe |---.--->|-|
| '---------------' |
| .---------------. |
'--->| Dezimalziffer |---'
| '---------------' |
| .-. |
'--------->( _ )---------'
'-'Buchstabe
.---.
|-|---.--->| A |---.--->|-|
| '---' ^
| .---. |
'--->| B |---'
| '---' ^
| .---. |
'--->| C |---'
| '---' ^
| .---. |
'--->| D |---'
| '---' ^
| .---. |
'--->| E |---'
| '---' ^
| .---. |
'--->| F |---'
| '---' ^
| .---. |
'--->| G |---'
| '---' ^
| .---. |
'--->| H |---'
| '---' ^
| .---. |
'--->| I |---'
| '---' ^
| .---. |
'--->| J |---'
| '---' ^
| .---. |
'--->| K |---'
| '---' ^
| .---. |
'--->| L |---'
| '---' ^
| .---. |
'--->| M |---'
| '---' ^
| .---. |
'--->| N |---'
| '---' ^
| .---. |
'--->| O |---'
| '---' ^
| .---. |
'--->| P |---'
| '---' ^
| .---. |
'--->| Q |---'
| '---' ^
| .---. |
'--->| R |---'
| '---' ^
| .---. |
'--->| S |---'
| '---' ^
| .---. |
'--->| T |---'
| '---' ^
| .---. |
'--->| U |---'
| '---' ^
| .---. |
'--->| V |---'
| '---' ^
| .---. |
'--->| W |---'
| '---' ^
| .---. |
'--->| X |---'
| '---' ^
| .---. |
'--->| Y |---'
| '---' ^
| .---. |
'--->| Z |---'
'---'
A .-.
|-|---.--->( a )---.--->|-|
| '-' ^
| .-. |
'--->( A )---'
'-'
B .-.
|-|---.--->( b )---.--->|-|
| '-' ^
| .-. |
'--->( B )---'
'-'
C .-.
|-|---.--->( c )---.--->|-|
| '-' ^
| .-. |
'--->( C )---'
'-'
D .-.
|-|---.--->( d )---.--->|-|
| '-' ^
| .-. |
'--->( D )---'
'-'
E .-.
|-|---.--->( e )---.--->|-|
| '-' ^
| .-. |
'--->( E )---'
'-'
F .-.
|-|---.--->( f )---.--->|-|
| '-' ^
| .-. |
'--->( F )---'
'-'
G .-.
|-|---.--->( g )---.--->|-|
| '-' ^
| .-. |
'--->( G )---'
'-'
H .-.
|-|---.--->( h )---.--->|-|
| '-' ^
| .-. |
'--->( H )---'
'-'
I .-.
|-|---.--->( i )---.--->|-|
| '-' ^
| .-. |
'--->( I )---'
'-'
J .-.
|-|---.--->( j )---.--->|-|
| '-' ^
| .-. |
'--->( J )---'
'-'
K .-.
|-|---.--->( k )---.--->|-|
| '-' ^
| .-. |
'--->( K )---'
'-'
L .-.
|-|---.--->( l )---.--->|-|
| '-' ^
| .-. |
'--->( L )---'
'-'
M .-.
|-|---.--->( m )---.--->|-|
| '-' ^
| .-. |
'--->( M )---'
'-'
N .-.
|-|---.--->( n )---.--->|-|
| '-' ^
| .-. |
'--->( N )---'
'-'
O .-.
|-|---.--->( o )---.--->|-|
| '-' ^
| .-. |
'--->( O )---'
'-'
P .-.
|-|---.--->( p )---.--->|-|
| '-' ^
| .-. |
'--->( P )---'
'-'
Q .-.
|-|---.--->( q )---.--->|-|
| '-' ^
| .-. |
'--->( Q )---'
'-'
R .-.
|-|---.--->( r )---.--->|-|
| '-' ^
| .-. |
'--->( R )---'
'-'
S .-.
|-|---.--->( s )---.--->|-|
| '-' ^
| .-. |
'--->( S )---'
'-'
T .-.
|-|---.--->( t )---.--->|-|
| '-' ^
| .-. |
'--->( T )---'
'-'
U .-.
|-|---.--->( u )---.--->|-|
| '-' ^
| .-. |
'--->( U )---'
'-'
V .-.
|-|---.--->( v )---.--->|-|
| '-' ^
| .-. |
'--->( V )---'
'-'
W .-.
|-|---.--->( w )---.--->|-|
| '-' ^
| .-. |
'--->( W )---'
'-'
X .-.
|-|---.--->( x )---.--->|-|
| '-' ^
| .-. |
'--->( X )---'
'-'
Y .-.
|-|---.--->( y )---.--->|-|
| '-' ^
| .-. |
'--->( Y )---'
'-'
Z .-.
|-|---.--->( z )---.--->|-|
| '-' ^
| .-. |
'--->( Z )---'
'-'
Dezimalziffer- (wurde schon in einer früheren Lektion definiert)
Qualifizierte Namen
Namen, die in Erweiterung eines einfachen Namens, noch zusätzliche Teile zur genaueren Bestimmung enthalten, werden auch als qualifizierte Namen bezeichnet.
Ein qualifizierter Name ist ein Bezeichnern zusammen mit einer Folge von vor ihm stehenden punktierten Bezeichnern.
Ein punktierter Bezeichner ist ein Bezeichner mit einem folgenden Punkt. Hierbei darf zwischen dem Bezeichner und dem Punkt kein Leerraum stehen. Daher bildet der Bezeichner zusammen mit dem Punkt eine einzige lexikalische Einheit. Dementsprechend wird diese Kategorie durch ein morphologisches Diagramm und nicht durch ein Syntaxdiagramm spezifiziert. Der Punkt ist hier auch kein Operator, da hier hier nicht als selbständige lexikalische Einheit mit Ausdrücken kombiniert wird.
- Morphologisches Diagramm
punktierter Bezeichner
.------------. .-.
|-|--->| Bezeichner |--->( . )--->|-|
'------------' '-'
Jeder Bezeichner (punktiert oder nicht) in einem qualifizierten Namen stellt eine lexikalische Einheit für sich dar. (In einem Punktnumerale, wie »3.2« ist der Punkt aber keine lexikalische Einheit, sondern nur das gesamte Numerale.)
- Direktbereich
? "a" & VBA.Constants.vbNewLine & "b"
a
b? "a" & VBA. Constants. vbNewLine & "b"
a
b? "a" & VBA. _
Constants. _
vbNewLine & "b"a
b
Zusammenfassend werden einfache Namen und qualifizierte Namen als Namen bezeichnet. Namen dürfen auch Punkte ».« enthalten, Bezeichner nicht.
Eigentliche Namen von Werten
Wir nennen den letzten Bezeichner am Ende eines qualifizierten Namens auch den eigentlichen Namen.
Die Syntax von Namen
- Syntaxdiagramm (vereinfacht)
Name
.------------.
----.---------------------------------.--->| Bezeichner |--->
^ .------------------------. | '------------'
'----| punktierter Bezeichner |---'
'------------------------'
Der Punkt in qualifizierten Namen ist linksassoziativ zu verstehen, auch wenn dies im vereinfachten Syntaxdiagramm nicht zum Ausdruck kommt:
Der Name »VBA.Constants.vbNewLine« wird also zunächst durch den rechten Punkt in den Namen »VBA.Constants« einerseits und den Bezeichner »vbNewLine« andererseits zerlegt.
Der Name »VBA.Constants« wird durch den Punkt in den Namen »VBA« einerseits und den Bezeichner »Integer« andererseits zerlegt.
Der Name »VBA« ist gleichzeitig auch ein Bezeichner.
Semantik
Die Bedeutung von »vb«
Konstanten, die von VBA bereits vordefiniert sind, werden durch ein vorangestelltes »vb« gekennzeichnet. Andere Konstanten könnten aber auf andere Weise gekennzeichnet sein oder ohne solch eine Kennzeichnung vorkommen.
Die Bedeutung des Punktes ».«
Im qualifizierten Namen »VBA.Constants.vbNewLine« wird der einfache Name »vbNewLine« durch den vorangestellten Text »VBA.Constants.« näher bestimmt („qualifiziert“). So kann er von eventuellen anderen Namen, die auch mit »vbNewLine« enden könnten, unterschieden werden. Solche langen Namen sind hilfreich, wenn in großen Programmen mehrere ähnliche Namen unterschieden werden sollen, ähnlich wie man in großen Gruppen von Personen zur Unterscheidung der Personen bei Gleichheit zweier Nachnamen noch die Vornamen zur Unterscheidung heranziehen kann.
Der Punkt ».« drückt in qualifizierten Namen aus, daß das Rechtsstehende in dem Linksstehenden „enthalten“ ist.
Daher nennen wir etwas, das links von einem Punkt stehen kann, auch manchmal ein Verzeichnis, und etwas, das rechts von einem Punkt stehen kann, einen Eintrag. (Hier ist mit „Verzeichnis“ nicht eine Verzeichnis von Dateien auf der Festplatte gemeint. Der Begriff „Verzeichnis“ wird hier vielmehr in seinem allgemeinen Sinne „Auflistung“ verwendet.)
»vbNewLine« ist also in »VBA.Constants« enthalten.
»Constants« ist in »VBA« enthalten.
Module (Klassen)
Wir haben schon erfahren, daß »vbNewLine« ein Zeilenende bezeichnet. Nun soll auch noch die Bedeutung der anderen Teile des qualifizierten Namens erklärt werden.
»VBA.Constants« ist ein Modul. Man kann sich Module zunächst als „Verzeichnis“ für Namen wie »vbNewLine« vorstellen.
Man kann sich vorstellen, daß es in VBA so viele Namen gibt, daß Module herangezogen werden, um sie übersichtlich abzulegen, so wie man Gegenstände in verschiedenen Schubladen ablegt.
Solche Module werden auch manchmal als „Klassen“ bezeichnet. (Genau genommen ist eine Klasse eine spezielle Art eines Moduls.)
Projekte (Bibliotheken)
Der Bezeichner »VBA« am Anfang von »VBA« steht für ein Projekt. Projekte sind Verzeichnisse für Module. So wie integrierte Konstanten in Moduln enthalten sind, sind Module in Projekten enthalten.
Der qualifizierte Name »VBA.Constants.vbNewLine« enthält also einen Projektnamen »VBA«, einen Modulnamen »VBA.Constants« (beziehungsweise »Constants« als eigentlichen Modulnamen) und schließlich einen Wertnamen »VBA.Constants.vbNewLine« (beziehungsweise »vbNewLine« als eigentlichen Wertnamen).
- Das Ineinanderenthaltensein bei »VBA.Constants.vbNewLine«
.----------------------------------------------------------.
| Projekt "VBA" |
| .------------------------------------------------------. |
| | Modul "Constants" | |
| | .--------------------------------------------------. | |
| | | Wert "vbNewLine" | | |
| | '--------------------------------------------------' | |
| '------------------------------------------------------' |
'----------------------------------------------------------'
Das Projekt »VBA« enthält Standardmodule der Programmiersprache VBA, also Module, die Bestandteil jeder VBA -Implementation sind.
Projekte werden auch manchmal als „Bibliotheken“ bezeichnet. Unter einer Bibliothek versteht man eher eine fest vorgegebene Sammlung von Modulen, die auch nicht unbedingt in VBA geschrieben sein muß. Bei einem „Projekt“ denkt man eher an eine Sammlung von Modulen, die als VBA-Quellcode vorliegt.
Verzeichnisse
Oft ist es nicht so wichtig, bei einem Verzeichniss anzugeben, ob es sich um ein Projekt, ein Modul oder eine andere Art von Verzeichnis handelt. Dann sprechen wir auch einfach nur von einem „Verzeichnis“ ohne die genaue Art des Verzeichnisses anzugeben. Man darf aber die hier behandelten Verzeichnisse nicht mit den Verzeichnissen eines Datenträgers (wie beispielsweise einer Festpatte) gleichsetzen. Vielmehr kann man sich vorstellen, daß es sich um Verzeichnisse innerhalb eines Programms handelt, die nur auf die hier gezeigte Weise über VBA zugänglich sind.
Qualifizierte Namen
Ein qualifizierter Name ist ein Name mit mindestens einem Punkt ».«.
Die Bedeutung eines qualifizierten Namens wird durch den eigentlichen Namen an seinem Ende angegeben.
Beispielsweise ist »VBA.Constants« der qualifizierte Name des Moduls »Constants« aus dem Projekt »VBA«.
»VBA.Constants.vbNewLine« ist der qualifizierte Name des Wertes »vbNewLine« aus dem Modul »VBA.Constants«.
Vollständig qualifizierte Namen
Namen wie »VBA.Constants.vbNewLine« sind vollständig bestimmt : noch genauer können sie nicht geschrieben werden (man kann keinen weiteren Bezeichner davor setzen). Deswegen werden sie auch als vollständig qualifizierte Namen oder als maximal qualifizierte Namen bezeichnet. Ein vollständig qualifizierter Name ist ein Name, dem keine weiteren Qualifikation mehr hinzugefügt werden kann, ohne seine Bedeutung zu verändern.
Ein vollständig qualifizierter Name beginnt mit einem Bezeichner für eine Bibliothek, dann findet man noch einen Bezeichner für ein Modul und einen weiteren Bezeichner.
Qualifizierte Namen ohne Modulnamen
Ein qualifizierter Name kann auch aus dem Namen einer Bibliothek und eines Eintrags eines Moduls besteht. So ist auch »VBA.vbNewLine« erlaubt und bezeichnet den Wert des Bezeichners »vbNewLine« aus einem nicht angegebenen Modul der Bibliothek »VBA«. Die Implementation kann das Modul des Bezeichners dann oft selbst in der angegebenen Bibliothek finden.
Stil
Vollständig qualifizierte Namen sind etwas robuster, da sie auch dann noch verwendbar sind, wenn weniger qualifizierte Namen zu Mißverständnissen führen könnte. Da das Risiko solcher Mißverständnisse in der Praxis oft nur gering ist, bevorzugen es viele Programmierer, nicht-qualifizierte Namen zu verwenden. Wir verwenden statt dessen im folgenden bevorzugt die vollständig qualfizierten Namen.
Gründe für die Qualifikation
Es ist in der Regel möglich, den Namen »vbNewLine« ohne Qualifikation zu verwenden, weil er nur in der Standardbibliothek von VBA vorkommt. Falls man später jedoch Zusatzbibliotheken verwenden will, dann könnte es sein, daß der Name auch in der Zusatzbibliothek verwendet wird. Dann wäre es nötig, die Qualifikation vor den Namen zu schreiben, um klarzustellen, daß man »VBA.Constants.vbNewLine« meint und nicht »vbNewLine« aus der Zusatzbibliothek. Wenn man die Qualifikation immer dazuschreibt, dann erspart man sich solche späteren Änderungen.
Eine Zusatzbibliothek wird nicht unbedingt absichtlich Namen definiert, die schon in der Standardbibliothek vorkommen. Es kann jedoch sein, daß ein Name zu einer Zeit in eine Zusatzbibliothek eingeführt wurde, als er noch nicht in der Standardbibliothek verwendet wurde.
Laufzeitwerte
Einige Namen stehen für Laufzeitwerte. Dies sind Werte, die erst während der Auswertung des Namens ermittelt werden. Bei der mehrfachen Auswertung solch eines Namens kann sich jedesmal wieder ein anderer Wert ergeben.
Der Name »VBA.Datetime.Time« steht beispielsweise für die Uhrzeit zum Zeitpunkt seiner Auswertung.
- Direktbereich
? VBA.Datetime.Time
10:41:06
? VBA.Datetime.Time
10:41:08
Ein Name, dessen Auswertung (innerhalb eines gewissen Rahmens) immer denselben Wert ergibt, wird auch Konstante genannt.
Übungsfragen
? Namen
Welche der folgenden Texte sind Namen?
- »32767«
- »VBA.Constants.vbNewLine«
- »vbNewLine«
? Namen
Welcher der folgenden Namen ist einfach (also ein Bezeichner), welcher qualifiziert und welcher vollständig qualifiziert?
- »VBA.Constants.vbNewLine«
- »vbNewLine«
- »Constants.vbNewLine«
? Benanntes
Wofür stehen die folgenden Namen jeweils? (Projekt, Wert oder Modul?)
- »VBA«
- »VBA.Constants«
- »VBA.Constants.vbNewLine«
? Enthaltensein
Was kann man aus der Schreibweise »alpha.beta« in VBA normalerweise entnehmen?
- »alpha« ist in »beta« enthalten
- »beta« ist in »alpha« enthalten
- keiner der obigen Antwortvorschläge trifft zu