Qualifizierte Namen in VBA (Qualifizierte Namen in VBA), Lektion, Seite 722891
https://www.purl.org/stefan_ram/pub/qualifizierte_namen_vba (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
VBA-Kurs

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?

?   Namen

Welcher der folgenden Namen ist einfach (also ein Bezeichner), welcher qualifiziert und welcher vollständig qualifiziert?

?   Benanntes

Wofür stehen die folgenden Namen jeweils? (Projekt, Wert oder Modul?)

?   Enthaltensein

Was kann man aus der Schreibweise »alpha.beta« in VBA  normalerweise entnehmen?

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722891 stefan_ram:722891 Qualifizierte Namen in VBA Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722891, slrprddef722891, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/qualifizierte_namen_vba