Aufrufwandlung in VBA
Es wird nicht verlangt, daß der Typ eines Arguments dem Typ des Parameters immer gleicht. Vielmehr ist es oft auch möglich, ein Argument von einem anderen Typ als dem des Parameters zu verwenden. Der Wert wird dann in einen entsprechenden Wert des Parametertyps uminterpretiert. Trotzdem ist es am besten, ein Argument anzugeben, dessen Typ dem Typ des entsprechenden Parameters gleicht.
Integer-Parameter
In diesem Abschnitt beschäftigen wir uns mit Parametern vom Typ »Integer«.
Als Beispiel verwenden wir hier die Funktion »VBA.Information.RGB«.
- Die Funktion »VBA.Information.RGB« (Proklamation, vereinfacht)
Function RGB( Red As Integer, Green As Integer, Blue As Integer )As Integer
Solange man für das zweite und dritte Argument den Wert »0« angibt, ist das Ergebnis dieser Funktion für kleine Zahlen der Wert des ersten Arguments.
Die genaue Bedeutung dieser Funktion ist hier nicht weiter wichtig, da es nur darum geht, zu illustrieren, welchen Datentyp der Ausdruck haben kann, der als erstes Argument verwendet wird.
Integer-Parameter und Integer-Argumentausdruck
Natürlich kann für einen Integer-Parameter ein Integer-Argumentausdruck verwendet werden. Der Wert des Integer-Argumentausdruck wird dann direkt für den Integer-Parameter herangezogen.
- Direktbereich
? VBA.Information.RGB( 2, 0, 0 )
2
Integer-Parameter und Double-Argumentausdruck
für einen Integer-Parameter kann auch ein Double-Argumentausdruck verwendet werden. Der Wert des Double-Argumentausdruck wird gerundet und dann für den Integer-Parameter herangezogen.
- Direktbereich
? VBA.Information.RGB( 2.1, 0, 0 )
2
? VBA.Information.RGB( 2.4, 0, 0 )
2
? VBA.Information.RGB( 2.5, 0, 0 )
2
? VBA.Information.RGB( 2.51, 0, 0 )
3
? VBA.Information.RGB( 2.99, 0, 0 )
3
? VBA.Information.RGB( 3.0, 0, 0 )
3
? VBA.Information.RGB( 3.1, 0, 0 )
3
Da es keinen Sinn hat, Nachkommastellen anzugeben, die dann gar nicht verwendet werden und die Rundung zu unerwarteten Ergebnissen führen kann, sollte in der Regel darauf verzichtet werden, einen Double-Argumentausdruck für einen Integer-Parameter anzugeben. Es ist nicht unbedingt hilfreich, wenn VBA dies toleriert und keine Fehlermeldung ausgibt, da man so nicht auf die versehentliche Verwendung eines unpassenden Typs aufmerksam gemacht wird.
Integer-Parameter und String-Argumentausdruck
Auch ein String-Argumentausdruck darf bei einem Integer-Parameter verwendet werden. Wenn dieser ein Integer-Numerale enthält. so wird dies als Integer-Wert interpretiert.
- Direktbereich
? VBA.Information.RGB( "2", 0, 0 )
2
Auch ein einzelnes Vorzeichen ist dabei im allgemeinen erlaubt. (Die Fehlermeldung ergibt sich bei dieser speziellen Funktion nur, weil negative Werte an dieser Stelle nicht erlaubt sind.)
- Direktbereich
? VBA.Information.RGB( "-2", 0, 0 )
⚠ Laufzeitfehler '5': Ungültiger Prozeduraufruf oder ungültiges Argument
- Eine „Prozedur“ ist ein Unterprogramm, hier also eine Funktion. Deutsch „Prozedur“ = Englisch “procedure ”.
Es ist auch möglich, ein Double-Numerale in einem String-Argumentausdruck zu verwenden. Der sich ergebende Double-Wert wird dann weiterverwendet, wie oben im Abschnitt „Integer-Parameter und Double-Argumentausdruck“ beschrieben.
- Direktbereich
? VBA.Information.RGB( "2.5", 0, 0 )
2
? VBA.Information.RGB( "2.51", 0, 0 )
3
Erst, wenn der Text in einer Zeichenfolge insgesamt nicht mehr als ein Numerale interpretiert werden kann, gibt es wirklich einmal eine Fehlermeldung.
- Direktbereich
? RGB( "2a", 0, 0 )
⚠ Laufzeitfehler '13': Typen unverträglich
? RGB( "a", 0, 0 )
⚠ Laufzeitfehler '13': Typen unverträglich
Double-Parameter
Die Situation bei einem Double-Parameter ist im wesentlich wie bei einem Integer-Parameter. Für einen Double-Parameter können also Argumente vom Typ »Integer«, »Double« und »String« angegeben werden. Deren Werte werden dann nach Möglichkeit als Double-Werte interpretiert. Anders als bei einem Integer-Parameter wird aber dabei nicht gerundet, sondern die Nachkommastellen werden soweit wie möglich als Teil des Wertes verwendet. Wir zeigen dies im folgenden an Hand der Funktion »VBA.Math.Sqr«.
- Die Funktion »VBA.Math.Sqr« (Proklamation, vereinfacht)
Function Sqr( Number As Double )
- Direktbereich
? VBA.Math.Sqr( 2.0 )
1.4142135623731
? VBA.Math.Sqr( 2 )
1.4142135623731
? VBA.Math.Sqr( "2.0" )
1.4142135623731
String-Parameter
Für einen String-Parameter können auch Double- und Integer-Argumente angegeben werden. Sie werden dann in einen Zeichenfolge umgewandelt, ähnlich wie dies geschieht, wenn eine Zahl ausgegeben wird, allerdings ohne daß dabei Leerzeichen hinzugefügt werden. Wir zeigen dies im folgenden an Hand der Funktion »VBA.Strings.StrReverse«, welche die Umkehrung der Argumentzeichenfolge ergibt.
- Die Funktion »VBA.Strings.StrReverse« (Proklamation, vereinfacht)
Function StrReverse( Expression As String )
- Direktbereich
? VBA.Strings.StrReverse( "ac" )
ca
? VBA.Strings.StrReverse( 123 )
321
? VBA.Strings.StrReverse( 123.45 )
54.321
Parameter- und Argumenttypen
Die folgende Tabelle zeigt, welche Argumenttypen für bestimmte Parametertypen zulässig sind.
- Tabelle
Parametertyp erlaubter Argumenttyp
Double Double, Integer, numerischer String
Integer Double, Integer, numerischer String
String Double, Integer, String
Übungsfragen
? Ausdrücke lesen
- Dokumentation von »VBA.Information.Err« (vereinfacht)
Function Err()
Element von VBA.Information- Dokumentation von »VBA.Math.Sin« (vereinfacht)
Function Sin( Number As Double )
Element von VBA.Math
Welcher der folgenden Aufrufe ist erlaubt?
- »VBA.Information.Err( 1 )«
- »VBA.Information.Err( 1.0 )«
- »VBA.Information.Err( "1.0" )«
- »VBA.Information.Err( "abc" )«
- »VBA.Math.Sin( 1 )«
- »VBA.Math.Sin( 1.0 )«
- »VBA.Math.Sin( "1.0" )«
- »VBA.Math.Sin( "abc" )«