Office: Laufzeitfehler '6': Überlauf

Helfe beim Thema Laufzeitfehler '6': Überlauf in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; In folgendem Code Round(Zeile / 520 * 100, 0) funktioniert die Variante1 einwandfrei. Stelle ich die Berechnungsreihenfolge um wie in Variante2... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Dippe, 22. Juli 2016.

  1. Laufzeitfehler '6': Überlauf


    In folgendem Code Round(Zeile / 520 * 100, 0) funktioniert die Variante1 einwandfrei. Stelle ich die Berechnungsreihenfolge um wie in Variante2 Round(100 * Zeile / 520), liefert VBA ab dem Wert Zeile = 328 "Laufzeitfehler '6': Überlauf". Offenbar bildet VBA intern bei "100 * Zeile" einen Zwischenwert im INTEGER Format und kommt damit nicht klar. Aber rein syntaktisch sollte der Code doch korrekt sein.
    Übrigens funktioniert Variante2 auch, wenn ich Zeile als LONG deklariere.

    Was mich interessiert: ist der Code syntaktisch korrekt oder nicht?
    Solche Effekte können ja an gottweißwo Stellen auftreten, an denen niemand mit rechnet, oder?

    Code:
     
    Dippe, 22. Juli 2016
    #1
  2. Hajo_Zi
    Hajo_Zi Erfahrener User
    du weist das Ergebnis einer Integer Variablen zu, das geht nicht.
    Für Zeile würde ich immer Long nehmen da 1.04.5756 Zeilen möglich sind.
     
    Hajo_Zi, 24. Juli 2016
    #2
  3. Der Datentyp Integer kann nur werte bis 32.768 verarbeiten

    Deine Zahl 328 mit 100 multipliziert ergibt 32.800 ...von daher geht das nicht...

    Als Programmierer sollte man dafür sorgen, daß genau so was nicht passieren kann...
     
    Zuletzt von einem Moderator bearbeitet: 12. Januar 2021
    Scorefun, 24. Juli 2016
    #3
  4. Laufzeitfehler '6': Überlauf

    Danke für eure bisherigen Anworten,
    ABER: der Ausdruck in der Klammer 100 * Zeile / 520 ist in diesem Beispiel IMMER 32768.

    Die einzig denkbare Erklärung ist nach wie vor, dass beim Abarbeiten des Ausdrucks in der Klammer bereits auf INTEGER Grenzen geprüft wird, obwohl der Ausdruck noch gar nicht fertig interpretiert wurde. Das würde aber bedeuten, dass gemäß der Anregung von Hajo_Zi ÜBERALL auf der linken Seiten von Ausdrücken und Funktionen sicherheitshalber das größte denkbare Teilergebnis als Werteumfang abgebildet werden sollte, also nur mit LONG bzw. DOUBLE arbeiten. Das ist kein effizienter Umgang mit Arbeitsspeicher, aber davon haben wir ja wohl alle anscheinend mehr als genug.
     
    Dippe, 24. Juli 2016
    #4
  5. Hajo_Zi
    Hajo_Zi Erfahrener User
    lese Bitte den ersten Beitrag
    100 * Zeile ist größer 32 tausend.
     
    Hajo_Zi, 24. Juli 2016
    #5
  6. OfficeUser Neuer User
    Moin Dippe!
    Was sagt der geneigte Kenner zu dieser Formel?
    Müsste doch einwandfrei funktionieren?
    Schließlich ist das ERGEBNIS im Zahlenraum von Excel angesiedelt:

     AB
    13,00E+307#ZAHL!
    ZelleFormel
    A1=3E+307
    B1=A1*1000/5200
    Excel Tabellen im Web darstellen >>
     
    Zuletzt von einem Moderator bearbeitet: 12. Januar 2021
    OfficeUser, 24. Juli 2016
    #6
  7. Hallo Hajo_Zi,

    wenn ich richtig informiert bin, Funktioniert eine Funktion wie folgt, Beispiel Runden:

    Round(Zeile / 520 * 100, 0)

    Zuerst wird der übergebene Parameter ausgewertet:

    328/520*100 = 63,0xxx

    Dann wird die Funktion ausgeführt : Round(63,0xxx, 0) ergibt 63.

    Oder?
     
    Dippe, 24. Juli 2016
    #7
  8. Laufzeitfehler '6': Überlauf

    Überdenke mal mein Beispiel in #6
     
    RPP63, 24. Juli 2016
    #8
  9. Hajo_Zi
    Hajo_Zi Erfahrener User
    das ist eine andere Rechnung?
    Teilergebnisse dürfen nicht über der Grenze sein. Du brauchst uns aber nicht glauben.
    Warum hast Du dann gefragt?
    Ich bin dann raus, da mir nicht geglaubt wird.
     
    Hajo_Zi, 24. Juli 2016
    #9
  10. Der Fehler kommt nicht, weil 'Zeile' als Integer definiert ist, sondern wegen Deiner Integer-Variablen 'Fortschritt'

    Dieser Variablen willst Du ein Formelergebnis zuweisen, bei der während der Berechnung die Grenzen eines Integer-Wertes überschritten werden...
    Fortschritt = Round(100 * Zeile / 520, 0)

    Jetzt verstanden?
     
    Zuletzt von einem Moderator bearbeitet: 12. Januar 2021
    Scorefun, 24. Juli 2016
    #10
  11. Hallo RFP63NEU,

    genau, das Beispiel zeigt, dass das Problem "unterwegs" beim interpretieren des Ausdrucks passiert. In Deinem Beispiel überschreiten wir da im ersten Schritt den Zahlenbereich und es kracht, bevor der Ausdruck fertig interpretiert wird. Wenn ich Deine Formel in B1 Umstelle: =A1/5200*1000 dann funktioniert es.

    Bleibt für mein Problem nur die Erklärung, dass Excel beriets VOR Auswertung des Ausdrucks rechts der Klammer den Zahlenbereich der Variablen links der Klammer annimmt und auch Zwischenergebnisse gegen diesen Bereich prüft. Wenn man das weiß, muss man sich halt immer auf die sichere Seite stellen.

    Ich habe nochmal VBA Definitionen angeschaut: WorksheetFunction.Round liefert als Ergebnis DOUBLE, VBA Round zeigt hierzu keine Angabe, dürfte aber ähnlich funktionieren. Ich vermute daher weiterhin, dass der Interpreter bereits bei Teilergebnissen gegen den Zieltyp prüft. Solange hier keine Überschreitung erfolgt, ist er zufrieden, da die Schleife ja bis 327 einwandfrei läuft. ber so ganz konsequent und sauber ist das m.E. nicht gelöst.

    Ich nehme also mit: Bei Variablen, die ihre Werte aus Ausdrücken und/oder Funktionen erhalten, sicherheitshalber den maximalen Wert einen Zwischenergebnisses berücksichtigen. Im zweifelsfalle die Reihefolge der Operanden intelligent wählen. Das sind dann wieder Basics, wie ScoreFun sagt: "Als Programmierer sollte man dafür sorgen, daß genau so was nicht passieren kann..."
     
  12. Hallo Ralf, habe eben nach Schreiben erst Deinen letzten Beitrag gesehen. Wir sind uns einig. Vielen Dank.
     
  13. Laufzeitfehler '6': Überlauf

    Hallo Ralf,
    Im folgenden Beispiel kommt auch dann der Fehler, wenn Fortschritt als Long definiert ist (Excel 2010).
    Code:
    Das war neu für mich.

    Gruß
    Aloys
     
    aloys78, 24. Juli 2016
    #13
  14. Moin Aloys!
    Der Bundesjogi würde jetzt sagen:
    "Högscht interessant!" *boah
    By the way:
    Es gibt ja diverse Codes im Netz, die eindeutig belegen, dass VBA auf long/double optimiert ist.
    Deshalb verwende ich in Produktivdateien grundsätzlich diese Datentypen!
    Und ja: Geschwindigkeit oder Speicherprobleme sind bei mir eigentlich nie ein Thema.

    Gruß Ralf
     
  15. Das war neu für mich.

    Gruß
    Aloys

    Huch...das war mir bislang auch fremd...haha
     
    Zuletzt von einem Moderator bearbeitet: 12. Januar 2021
    Scorefun, 24. Juli 2016
    #15
Thema:

Laufzeitfehler '6': Überlauf

Die Seite wird geladen...
  1. Laufzeitfehler '6': Überlauf - Similar Threads - Laufzeitfehler '6' Überlauf

  2. VBA:Laufzeitfehler beim Einlesen in Variable

    in Microsoft Excel Hilfe
    VBA:Laufzeitfehler beim Einlesen in Variable: Hallo Excel Freaks, ich habe eine Frage, ein Problem wo ich nicht mehr weiter weis.... In eine Exceldatei kopiere ich mir über Makro auf ein Tabellenblatt von anderen Exceldateien das...
  3. Datenbank bleibt gesperrt - laccdb wird nicht gelöscht

    in Microsoft Access Hilfe
    Datenbank bleibt gesperrt - laccdb wird nicht gelöscht: Hallo zusammen, ich betreue eine Datenbank mit getrenntem Back- und Frontend, die in einem Firmennetzwerk auf dem Netzlaufwerk liegt. Ich entwickle sie lokal weiter, ohne vor Ort zu sein, wobei...
  4. Access Laufzeitfehler 3048

    in Microsoft Access Hilfe
    Access Laufzeitfehler 3048: Bevor ihr Euren Code durchrackert, weil Access plötzlich Probleme macht: Die Version 2408 (Build 17928.20114) dürfte ein wenig misslungen sein! Access bleibt nach dem Schließen im Taskmanager...
  5. Laufzeitfehler 9 VBA

    in Microsoft Excel Hilfe
    Laufzeitfehler 9 VBA: Nschdem ich die Office Version von 2010 auf 2019 aktualisiert habe wird mir der Laufzeitfehler 9 ausgegeben. Das ist der Code Sub FiberCollect() Dim NumRows As Long 'letzte celle Dim Counter As...
  6. Laufzeitfehler 6 "Überlauf" ???

    in Microsoft Excel Hilfe
    Laufzeitfehler 6 "Überlauf" ???: Hallo, folgender Code funktionierte bis jetzt immer super, aber irgendwo bei Zeile 32000 fing er an mir ein Laufzeitfehler 6, "Überlauf" zu melden. Was ist da los? Code: Sub letzte_Zeile() Dim...
  7. Deklaration erfordert ein Dummy-Argument

    in Microsoft Excel Hilfe
    Deklaration erfordert ein Dummy-Argument: Ich habe ein UserForm mit drei Textfelder, die ausschliesslich Zahlen enthalten können – wird bei der Eingabe geprüft. Die Felder haben die Namen ‘STAMM’, ‘VON’ und ‘BIS’. Im weiteren Prozess muss...
  8. Laufzeitfehler 6

    in Microsoft Excel Hilfe
    Laufzeitfehler 6: Hallo miteinander, bei dem folgenden Code, verursacht die in rot geschriebene Codezeile den Laufzeitfehler 6 Überlauf. Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden