Laufzeitfehler ‚6‘
Dies ist ein Laufzeitfehler, der auftritt, wenn Sie eine Zahl für die Variabel angeben, die außerhalb des Zahlenbereichs liegt, den dieser Datentyp annehmen kann. Um den Code effizient zu debuggen, ist es wichtig, zuerst den Fehler Ihres VBA-Codes zu verstehen. In diesem Artikel behandeln wir die möglichen Gründe für das Auftreten dieses Fehlers und wie der Fehler behoben werden kann.
Dies sind die drei möglichen Ursachen des Fehlers:
- Sie versuchen eine Zahl in einer Berechnung zu verwenden und diese Zahl wird in eine ganze Zahl umgewandelt, aber das Ergebnis ist größer als eine ganze Zahl.
- Eine Zuweisung zu einer Eigenschaft übersteigt den Höchstwert, den die Eigenschaft annehmen kann.
- Das Ergebnis einer Zuweisung, Berechnung oder Datentypkonvertierung ist zu groß.
Nachfolgend werden wir uns mögliche Ursachen dieses Fehlers ansehen und Lösungen aufzeigen.
Was verursacht den Fehler?
Bevor Sie mit der Behebung des Fehlers fortfahren, müssen Sie die Fehlerursache in Ihrem VBA-Code identifizieren. Die Codezeile, die den Fehler verursacht, wird gelb hervorgehoben, sobald die Debug-Schaltfläche gedrückt wird.
Ursache 1: Ergebnis einer Berechnung ist zu gross
Beispielfehlercode:
Sub myMacro ()
Dim x As Long
x = 8400 * 365 \' Error: Overflow
End Sub
Im obigen Code versuchen Sie, eine Zahl in einer Berechnung zu verwenden, und diese Zahl wird in eine ganze Zahl umgewandelt, aber das Ergebnis ist größer als eine ganze Zahl, was zu einem Überlauf-Laufzeitfehler führt.
Lösung:
Um den Fehler zu beheben, verwenden Sie die VBA-CLng-Funktion, um den ganzzahligen Datentyp in einen langen Datentyp zu konvertieren.
Hinweis: „CLng“ steht für „Convert to Long“. Diese Funktion konvertiert den anderen Datentyp in einen langen Datentyp, der die Werte von -2.147.483.648 bis 2.147.483.648 aufnehmen kann.
Code:
Sub myMacro()
Dim x As Long
x = CLng(8400) * 365
End Sub
Ursache 2: Dividieren durch Null
Während der folgende Code einfach eine Zahl durch die andere dividiert, gibt es einige Fälle, in denen dies nicht möglich ist. Wenn beispielsweise Zelle A1 = 2 und Zelle A2 = 0 ist, ist es nicht möglich, durch Null zu dividieren. Das Laufzeitfehlerfeld enthält eine Debug-Schaltfläche, die den Problemcode hervorhebt.
Beispielfehlercode:
Sub myMacro()
Dim Zaehler, Nenner As Long
Zaehler = Range("A1")
Nenner = Range("B1")
MsgBox Zaehler / Nenner
End Sub
Dieser Fehler kann mit einem Error-Handler abgefangen werden, indem geprüft wird ob der Nenner Null ist.
Ursache 3: Falscher Datentyp
Angenommen, Sie verwenden den Datentyp Integer, der Werte zwischen -32.768 und 32.767 annehmen kann. Wenn Sie also einen Wert angeben, der außerhalb dieses Bereichs liegt, erhalten Sie den Laufzeitfehler Overflow.
Beispielfehlercode:
Sub myMacro()
Dim Zahl As Integer
Zahl = 100000
End Sub
Lösung
Wenn Sie den Datentyp auf bspw. Single ändern, dann kann die Variabel grössere Zahlen speichern und der Überlauf-Fehler tritt nicht mehr auf.
Code:
Sub myMacro()
Dim Zahl As Single
Zahl = 100000
End Sub
Nachfolgend finden Sie eine Übersicht der Datentypen. Der Überlauf findet dann statt, wenn der zugewiesene Wert nicht mehr im Wertebereich liegt.
Datentyp | Speicherbedarf | Wertebereich |
Byte | 1 Byte | 0 bis 255 |
Boolean | 2 Bytes | True oder False |
Integer | 2 Bytes | -32.768 bis 32.767 |
Long | 4 Bytes | -2.147.483.648 bis 2.147.483.647 |
Single | 4 Bytes | -3,402823E38 bis -1,401298E-45 und 1,401298E-45 bis 3,402823E38 |
Double | 8 Bytes | -1,79769313486231E308 bis -4,94065645841247E-324 und 4,94065645841247E-324 bis 1,79769313486232E308 |
Currency | 8 Bytes | -922.337.203.685.477,5808 bis 922.337.203.685.477,5807 |
Decimal | 16 Bytes | +/-79.228.162.514.264.337.593.543.950.335 ohne Dezimalzeichen; +/-7,9228162514264337593543950335 mit 28 Nachkommastellen |
Date | 8 Bytes | Januar 100 bis 31. Dezember 9999 |
Object | 4 Bytes | Verweis auf Object |
String | >10 Bytes | bis 2 Mrd. |
Variant | >16 Bytes |
Benötigen Sie einen VBA Programmierer?
Wir als exact construct programmieren mit einem Team von rd. 20 Mitarbeitern seit über 10 Jahren Excel-Tools. Wir sind ein Nischenanbieter der spezialisiert auf Makros/VBA-Codes ist. Daneben unterstützen wir auch als 3rd Level Support die IT-Abteilungen rund um Probleme bei MS Office (Excel, Word, PowerPoint, etc.).
Haben Sie ein Excel-Problem? Benötigen Sie einen Makro-Programmierer? Rufen Sie uns unverbindlich an +41 52 511 05 25 oder kontaktieren Sie uns via Kontaktformular.