Fehlvariablen von Objekten
Eine Fehlvariable ist eine Variable eines Objektes, die angenommen wird, wenn an einer Stelle, an der die Angabe einer Variablen erwartet wird, nur ein Objekt angegeben wird.
Die Fehlvariable von VBA.Err-Objekten ist »Number«.
Wir betrachten zunächst das folgende Programm mit ».Number«.
Modul1
Option Explicit
Sub Main()
Debug.Print VBA.Information.VarType( VBA.Err.Number )
Debug.Print VBA.VbVarType.vbLong
Debug.Print VBA.Err.Number
Let VBA.Err.Number = 7
Debug.Print VBA.Err.NumberEnd Sub
transcript
3
3
0
7
Wir können nun ».Number« überall weglassen, und das Programm läuft genauso.
Modul1
Option Explicit
Sub Main()
Debug.Print VBA.Information.VarType( VBA.Err )
Debug.Print VBA.VbVarType.vbLong
Debug.Print VBA.Err
Let VBA.Err = 7
Debug.Print VBA.ErrEnd Sub
Protokoll
3
3
0
7
»Number« ist die Fehlvariable des VBA.Err-Objektes. Eine Fehlvariable oder Fehleigenschaft ist eine Variable eines Objekts, die angenommen wird, wenn die Angabe einer Variablen fehlt.
Wenn »VBA.Information.VarType« mit einem Objekt als Argument aufgerufen wird, das eine Fehlvariable besitzt, dann ergibt sich eine Information über jene Fehlvariable und nicht über das Objekt!
Es gibt aber Ausnahmen von der Annahme einer Fehlvariablen, beispielsweise bei der Verwendung von »VBA.Information.IsObject« und »VBA.Information.TypeName«. Dort steht »VBA.Err« wirklch für das Objekt »VBA.Err« selber und nicht für dessen Eintrag »VBA.Err.Number«.
Man kann den Ausdruck für das Objekt aber einklammern, um sich auf die Fehleigenschaft zu beziehen.
Modul1
Option Explicit
Sub Main()
Debug.Print VBA.Information.IsObject( VBA.Err ) ' Inhalt von VBA.Err ist Objekt
Debug.Print VBA.Information.TypeName( VBA.Err ) ' Typ des /Inhaltes/ von VBA.Err
Debug.Print VBA.Information.IsObject( ( VBA.Err )) ' Fehleigenschaft ist kein Object
Debug.Print VBA.Information.TypeName( ( VBA.Err )) ' Fehleigenschaft hat Typ LongEnd Sub
Protokoll
Wahr
ErrObject
Falsch
Long
Man kann den Unterschied sehen, indem man zum Vergleich einmal ».Number« hinzufügt.
Modul1
Option Explicit
Sub Main()
Debug.Print VBA.Information.IsObject( VBA.Err.Number ) ' Falsch, Inhalt ist kein Objekt
Debug.Print VBA.Information.TypeName( VBA.Err.Number ) ' Long, Typ des Inhalts der VariablenEnd Sub
transcript
Falsch
Long
Der Name eines Objektes steht in vielen Fällen für die Fehlvariable des Objekts, aber in manchen Fällen auch für das Objekt selber.
Einklammern eines Objektes ergibt die Fehleigenschaft.
Modul1
Option Explicit
Sub Main()
Debug.Print Typename( VBA.Err )
Debug.Print Typename( ( VBA.Err ))
Debug.Print Typename( ( ( VBA.Err )))
End Sub
Protokoll
ErrObject
Long
Long
Objektvergleiche
Obwohl »=« in dem folgenden Beispiel zufällig das gleiche Ergebnis liefert, muß »Is« verwendet werden, um zu erfahren, ob zwei Auswertungen das gleiche Objekt ergeben.
Bei »=« kann es sein, daß stattdessen die Fehlwerte verglichen werden.
Modul1
Option Explicit
Sub Main()
Debug.Print VBA.Err Is VBA.Err
Debug.Print VBA.Err = VBA.Err
Let VBA.Err.Number = 7
Debug.Print VBA.Err = 7
End Sub
- Protokoll
Wahr
Wahr
Wahr
? Übungsfrage
Welche Ausgabe erzeugt das folgende Programm?
Modul1
Option Explicit
Sub Main()
Let VBA.Err.Number = 2
Debug.Print VBA.Err.NumberEnd Sub
? Übungsfrage (1)
Welche Ausgabe erzeugt das folgende Programm?
Modul1
Option Explicit
Sub Main()
Let VBA.Err.Number = 2
Debug.Print VBA.ErrEnd Sub