Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1220to1224
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Var Typen für große Ganzzahlen

Var Typen für große Ganzzahlen
Eddie
Hallo,
unter Excel 2003 stürzt mir dauernd ein VB Script mit Overflow ab.
Die überlaufende Variable soll den Wert 3.082.000.000 schlucken. Benutzt ist Typ single - das sollte schon gehen. aber genauso wenig geht Double, currency oder variant. Besagte Variable wird über ein sub (varname) in einer anderen routine gelesen. Dort habe ich die typen natürlich auch versucht zu ändern - ohne Erfolg.
Ist da in der Version 2003 ein Bug oder kann ich nicht mehr denken.
Gruß Eddie

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Var Typen für große Ganzzahlen
11.07.2011 07:57:13
Tino
Hallo,
meiner Meinung nach ist der Typ Double der richtige.
Du müsstest darauf achten, dass Du überall mit diesen Datentyp arbeitest.
Beispiel:
Dim dblWert As Double
dblWert = CDbl(3082) * CDbl(1000000)
Gruß Tino
AW: Var Typen für große Ganzzahlen
11.07.2011 08:11:31
Eddie
Hallo,
Problem ist gelöst - eine der Multiplizierenden Variaben war als long deklariert. Somit hätte anstatt einem Overflow ein Type missmatch kommen müssen.
Gruß Eddie
Schön,, aber...
11.07.2011 10:05:31
Erich
Hi Eddie,
schön, dass das Problem gelöst ist. Was du noch dazu schreibst, ist abefr m. E. nicht richtig:
Dass eine der beteiligten Variablen den Typ Long hat, löst den Fehler noch nicht aus.
Und es kommt - im Fehlerfall - auch kein Type Mismatch, sondern richtigerweise ein Overflow.
Beides kannst du sehen, wenn du diesen Code testest:

Option Explicit
Sub mitLong()
Dim dblWert As Double
' ohne Fehler
dblWert = CDbl(3082) * CLng(1000000)
dblWert = CLng(3082) * CDbl(1000000)
dblWert = CSng(3082) * CLng(1000000)
dblWert = CLng(3082) * CSng(1000000)
dblWert = CLng(3082) * CLng(1000000)   ' Overflow auf der rechten Seite
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Schön,, aber...
11.07.2011 19:04:18
Eddie
Hallo,
ich weiß jetzt leider nicht genau, was Du wissen möchtest. Die Routine von Dir löst den Fehler aus, so von Dir beschrieben. Ich kann jetzt nur noch mal das ursprüngliche Problem genauer zeigen (Kurzfassung):
Overflow:
Sub Test(ByVal faktor2&, produkt!)
Dim faktor1!
produkt = faktor1 * faktor2
End Sub
Läuft:
Sub Test(ByVal faktor2&, produkt!)
Dim faktor1!
produkt = faktor1 * CSng(faktor2)
End Sub
In dieser Kurzfassung sieht man das Problem auch, nur leider ist der original Text etwas länger.
Gruß Eddie
Anzeige
AW: Schön,, aber...
11.07.2011 21:16:03
Tino
Hallo,
persönlich würde ich die Deklarierung nicht so durcheinander würfeln.
Gruß Tino
AW: Schön,, aber...
14.07.2011 00:22:28
Eddie
Hallo,
faktor2 basiert auf einer Anzahl, dagegen ist Faktor 1 ein Dezimalwert. Wäre es eleganter die Anzahl ebenfalls als single zu deklarieren?
Gruß Eddie
AW: Schön,, aber...
14.07.2011 11:13:20
Tino
Hallo,
ich kann es nur vermuten,
aber ich denke VBA wird nicht z.Bsp. Single mit Integer Multiplizieren
sonder diese intern in ein geeignetes einheitliches Format umwandeln.
Man wird es so auch nicht merken weil es recht schnell geht,
aber wenn man sich mal eine Schleife aufbaut mit unterschiedlichen Variablen und
lässt diese einige Millionen Mal durchlaufen,
kommen schon 0,2 bis 0,3 Sekunden (Rechnerleistung) unterschied raus
gegenüber wenn die Deklarierung einheitlich ist.
Gruß Tino
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige