Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1152to1156
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

Problem mit Variable mit dbl dimensioniert

Problem mit Variable mit dbl dimensioniert
Peter
Guten Tag.
Ich habe mit untenstehender Codezeile Probleme. Ich möchte aus einer Double-Variablen mittels Division und Multiplikation (beides Long Variablen) eine neue Double-Variable ermitteln.
Anscheinend gibt dies Probleme, denn ich erhalte die Fehlermeldung: "Überlauf"
dblABC = dblABCx / (lngA - lngB) * lngA
Wo liegt das Problem und kann mir jemand einen Tipp geben, wie ich zum Ziel gelange?
Danke und Gruss, Peter

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Problem mit Variable mit dbl dimensioniert
27.04.2010 14:08:34
Ramses
Hallo
Welche Werte werden lngA und lngB denn zugewiesen ?
Gruss Rainer
AW: Problem mit Variable mit dbl dimensioniert
27.04.2010 14:11:10
Peter
Hallo Rainer
lngA und lngB enthalten immer ganze Zahlen, in der Regel zwischen 0 und 500000
Gruss, Peter
AW: Problem mit Variable mit dbl dimensioniert
27.04.2010 14:24:36
Ramses
Hallo
Dann kannst du im Extremfall das Limit der Long-Variablen überschreiten
"...Long (lange Ganzzahl) werden als 32-Bit-Zahlen (4 Bytes) mit Vorzeichen im Bereich von -2.147.483.648 bis 2.147.483.647 gespeichert..."
Im Extremfall erhältst du z.B. bei folgender Variante einen Überlauf
Sub test()
    Dim dblABC As Double, dblABCx As Double, lngA As Long, lngB As Long
    dblABCx = 123
    lngA = 500000
    lngB = 450000
    MsgBox lngA - lngB
    'Hier kommt der Überlauf
    'weil das Ergebnis nicht maximal 2.147.483.647
    'sondern 25.000.000.000 ist
    MsgBox 50000 * lngA
    dblABC = dblABCx / (lngA - lngB) * lngA
    MsgBox dblABC
End Sub

Die Mulitplikation wird aber immer zuerst unter den LONG-Variablen durchgeführt und das Ergebnis wäre automatisch ein LONG-Wert der zu einem Überlauf führt, weil der Wert eben zu gross ist
Sub test()
    Dim dblABC As Double, dblABCx As Double, lngA As Long, lngB As Long
    Dim lngAx As Double, lngBx As Double
    dblABCx = 123
    lngA = 500000
    lngB = 450000
    'Hier funktioniert es, weil
    'vorher eine Typkonvertierung durchgeführt wird
    lngAx = lngA
    lngBx = lngB
    MsgBox 50000 * lngAx
    dblABC = dblABCx / (lngA - lngB) * lngA
    MsgBox dblABC
End Sub

Gruss Rainer
Anzeige
AW: Problem mit Variable mit dbl dimensioniert
27.04.2010 15:20:21
Peter
Hallo Rainer
Vielen Dank für die ausführliche Antwort.
Daraufhin habe ich ein kleiner Umbau gemacht und staune, resp. begreife nicht, weshalb folgende Rechnung nicht funktioniert:
dblSub = 9000
dblRed = 99506
If dblSub = 0 Then
dblASub = 0
dblBSub = 0
Else
dblFaktorSub = dblSub / (dblSub - dblRed)
Nach Arbeitung dieses Codes ergibt dblFaktorSub NULL und dieser Wert ist dann für eine Division unbrauchbar.
Im Direktbereich erhalte ich jedoch die gewünschten Ergebnisse:
?dblsub
9000
?dblsub-dblred
-90506
?dblsub/(dblsub-dblred)
-9.94409210439087E-02
Was mache ich falsch?
Gruss, Peter
Anzeige
AW: Problem gelöst
27.04.2010 15:25:41
Peter
Hallo
Beim x-ten Mal gefunden: eine Variable war falsch dimensioniert.
Gruss, Peter
Fehler in der Variablendeklaration
27.04.2010 15:39:58
Ramses
Hallo
Das Ergebnis aus dem Direktbereich erscheint mir nicht korrekt
Tabelle2

 AB
1-0.09944092 
2  

Formeln der Tabelle
ZelleFormel
A1=9000/(9000-99506)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Der Wert ist schlicht zu klein um in Double oder Single angezeigt zu werden. Verwende stattdessen den Datentyp CDec wenn du solche Werte erwartest.
Sub test2()
    dblSub = 9000
    dblRed = 99506
    If dblSub = 0 Then
        dblASub = 0
        dblBSub = 0
    Else
        MsgBox CDec(dblSub / (dblSub - dblRed))
    End If
End Sub

Schau mal in der VBA-Hilfe unter Typumwandlung oder direkt im jeweiligen Datentyp nach welche Werte dort darstellbar sind
Userbild
Gruss Rainer
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige