Hallo Alberto
Post by Alberto LucaDim llng As Long
Dim ldbl As Double
llng = 60 * 1000 '=> Fehler
ldbl = 60 * 1000 '=> Fehler
llng = 60000 '=> OK
Sowohl Long als auch Double müssten doch 60.000 aufnehmen können.
Woran liegts?
Wie Du das beheben kannst, hast Du ja bereits mitbekommen, aber nicht der
Grund.
Der Grund ist der, dass VBA den Typen der einzelnen Variablen, die Du
multiplizierst verwendet um das Ergebnis zwischenzuspeichern. Das ist in
diesem Fall wohl ein Integer, das Ergebnis hat aber in einem Integer nicht
Platz. Wenn es Platz hätte würde VBA anschliessend das Ergebnis in einen
Double umwandeln und der Variablen zuteilen.
Im letzten Fall hast Du ja bereits eine Variable verwendet, die grösser als
32k ist, daher hat VBA hier gleich einen Long genommen, darum gehts.
Die sauberste Methode ist, keine Zahlen direkt zu verwenden, sondern die
Typen über Variablen festzulegen (das Thema Benamsungen solltest Du in der
FAQ ebenfalls mal lesen).
Also z.B. so:
Dim lngSekunden as Long
Dim lngMS as Long
Dim lngDauer as Long
lngSekunden = 60
lngMS = 1000
lngDauer = lngSekunden * lngMS
Oder dann die schnellere Version:
Dim lngDauer as Long
lngDauer = 60 * 1000.0
Damit wird VBA gezwungen einen Double Datentypen zu verwenden
(Nachkommazahl). VBA wird allerdings so raffiniert sein und 1000.0 sofort in
1000# umwandeln, damit es beim Interpretieren nicht immer wieder überlegen
muss, welcher Datentyp denn da benutzt werden sollte. Das erspart Dir die
Suche nach den Datentyp Suffixen ;-)
Gruss
Henry
--
Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com