Variablen in Objekten in VBA
Variablen in Objekten
Das VBA.Err-Objekt enthält eine Variable »Number« vom Typ »Long« – den Typ »Long« kann man sich wie den schon bekannten Typ »Integer« vorstellen.
- Das Objekt »VBA.Err« als ein Verzeichnis mit einem Eintrag »Number«
VBA.Err
.----------------.
| Number As Long |
'----------------'
Für die Variable »Number« aus dem Objekt »VBA.Err« schreibt man »VBA.Err.Number«
Modul1
Option Explicit
Sub Main()
Debug.Print VBA.Information.VarType( VBA.Err.Number ) ' vbLong (3), Typ der Variablen
Debug.Print VBA.VbVarType.vbLong
Debug.Print VBA.Information.TypeName( VBA.Err.Number ) ' Long, Typ des Inhaltes der Variablen
Debug.Print VBA.Information.IsObject( VBA.Err.Number ) ' Falsch, Inhalt ist kein Objekt
Debug.Print VBA.Err.Number ' Lesen (0)
Let VBA.Err.Number = 7 ' Schreiben
Debug.Print VBA.Err.Number ' Lesen (7)End Sub
transcript
3
3
Long
Falsch
0
7
Es gibt noch eine andere Variable im selben Objekt.
- Das Objekt »VBA.Err« als ein Verzeichnis mit zwei Einträgen
VBA.Err
.------------------.
| Number As Long |
| Source As String |
'------------------'Modul1
Option Explicit
Sub Main()
Debug.Print VBA.Information.VarType( VBA.Err.Source ) ' vbString (8), Typ der Variablen
Debug.Print VBA.VbVarType.vbString
Debug.Print VBA.Information.TypeName( VBA.Err.Source ) ' String, Typ des Inhaltes der Variablen
Debug.Print VBA.Information.IsObject( VBA.Err.Source ) ' Falsch, Inhalt ist kein Objekt
Debug.Print VBA.Err.Source ' Lesen ("")
Let VBA.Err.Source = "S" ' Schreiben
Debug.Print VBA.Err.Source ' Lesen ("S")End Sub
transcript
8
8
String
Falsch
S
Die Variablen eines Objektes werden auch Eigenschaften, Attribute oder Felder genannt.
Eckige Klammern
Die Namen von Einträgen dürfen bei ihrer Verwendung hinter dem Punkt ».« in eckige Klammern eingeschlossen werden.
Modul1
Option Explicit
Sub Main()
Debug.Print VBA.Err
Debug.Print VBA.[Err]
End Sub
- Protokoll
0
0
Das Einschließen in eckige Klammern ist dann nötig, wenn auf Namen zugegriffen werden soll, die Grundstriche »_« enthalten, wie in dem folgenden Beispiel.
Modul1
Option Explicit
Sub Main()
Debug.Print VBA.[_HiddenModule].StrPtr( "abc" )
End Sub
- Protokoll
51559476
Solche Namen werden aber nur für Einträge verwendet, die normalerweise gar nicht oder nur ganz selten benötigt werden.
Übungsaufgaben
/ Übungsaufgabe
(Diese Übungsaufgabe setzt eine Bearbeitung in Excel voraus.)
Das Objekt »Excel.Application« enthält eine Variable »Caption«.
Schreiben Sie ein Programm mit den folgenden Schritten:
- Ausgabe der Variablen »Caption«
- Deklaration einer Variablen
- Kopieren des Wertes der Variablen »Caption« in die neu deklarierte Variable
- Schreiben des Textes »Test« in die Variable »Caption«.
(Damit auf Excel zugegriffen werden kann, muß die Excel -Bibliothek in VBA eingebunden sein. Dies ist normalweise der Fall, wenn der VBE von Excel aus geöffnet wird.)
Kuriosität Klammern ⃗
Das folgende Programm zeigt, daß direkt hinter dem Namen einer Eigenschaft auch ein Paar runder Klammern zulässig ist, obwohl dies nichts an der Bedeutung des Ausdrucks ändert. Es bringt aber zum Ausdruck, daß das Lesen einer Eigenschaft tatsächlich eine interne Prozedur eines Objektes starten kann, so daß es sich wie ein Funktionsaufruf auswirken kann.
Modul1
Option Explicit
Sub Main()
Debug.Print VBA.Information.VarType( VBA.Err.Source() ) ' vbString (8), Typ der Variablen
Debug.Print VBA.VbVarType.vbString
Debug.Print VBA.Information.TypeName( VBA.Err.Source() ) ' String, Typ des Inhaltes der Variablen
Debug.Print VBA.Information.IsObject( VBA.Err.Source() ) ' Falsch, Inhalt ist kein Objekt
Debug.Print VBA.Err.Source() ' Lesen ("")
Let VBA.Err.Source() = "S" ' Schreiben
Debug.Print VBA.Err.Source() ' Lesen ("S")End Sub
Protokoll
8
8
String
Falsch
S
Tatsächlich gibt es auch Eigenschaften, die Argumente akzeptieren, welche Ihnen wie beim Aufruf einer Funktion, die Parameter hat, übergeben werden.