Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1588to1592
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
Fehler 6 "Überlauf"
08.11.2017 16:43:54
Bernd
Hallo zusammen,
habe plötzlich ein Problem beim Starten einer Userform und zwar wird "Fehler 6 Überlauf" angezeigt. Ich habe festgestellt, dass es an der leeren Tabelle liegt, die die Listbox in der UF füllen soll.
Nun meine Frage. Wie kann ich die Userform starten, obwohl die besagte Tabelle leer ist?
Für eure Hilfe schon mal Danke im Voraus!
Userbild
Office Version 2016 Pro 32bit - Windows10 Pro 64 bit
"Wenn du jemanden ohne Lächeln triffst, schenke ihm dein's!"

37
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler 6 "Überlauf"
08.11.2017 16:52:43
Peter(silie)
Hallo,
wie sieht denn dein Code aus?
Überlauf bedeutet, dass eine deiner Variablen mehr
Bytes bekommt, als der Datentyp tragen kann.
In dem Fall, musst du einen größeren Datentypen nehmen.
AW: Fehler 6 "Überlauf"
08.11.2017 16:56:07
Bernd
Hallo Peter,
Schön, das du mir helfen möchtest.
Mein Code:
Private Sub UserForm_Initialize()
Dim tblDepot As Worksheet
Dim strName As String
Set tblDepot = Worksheets("Depot")
With frm_Start
Label25.Caption = Format(Date, "dddd,") & " " & "den " & " " & Format(Date, "dd.mm.yyyy")
Label26.Caption = "Gesamt-" & Worksheets("Depot").Range("L1").Text
Label27.Caption = "Gewinn/-Verlust €"
Label44.Caption = "Gewinn/-Verlust %"
.Label28.Caption = tblDepot.Cells(1, 1).Value
.Label29.Caption = tblDepot.Cells(1, 2).Value
.Label30.Caption = tblDepot.Cells(1, 3).Value
.Label31.Caption = tblDepot.Cells(1, 4).Value
.Label32.Caption = tblDepot.Cells(1, 5).Value
.Label33.Caption = tblDepot.Cells(1, 6).Value
.Label34.Caption = tblDepot.Cells(1, 7).Value
.Label35.Caption = tblDepot.Cells(1, 8).Value
.Label36.Caption = tblDepot.Cells(1, 9).Value
.Label37.Caption = tblDepot.Cells(1, 10).Value
.Label38.Caption = tblDepot.Cells(1, 11).Value
.Label39.Caption = tblDepot.Cells(1, 12).Value
.Label40.Caption = tblDepot.Cells(1, 13).Value
.Label41.Caption = tblDepot.Cells(1, 14).Value
End With
With Worksheets("Depot")
Dim Zeile
Zeile = Cells(Rows.Count, 1).End(xlUp).Row
TextBox26 = Format(Application.Sum(.Columns(12)), "#,##0.00 €")
TextBox27 = Format(Application.Sum(.Columns(13)), "#,##0.00 €")
TextBox28 = Format(TextBox27.Value / TextBox26.Value, "0.00 %")
With ListBox1
.ColumnCount = 16
.ColumnWidths = "3,4cm;1,8cm;1,1cm;1,1cm;1,8cm;2,8cm;1,5cm;2,8cm;1,8cm;1,5cm;2cm;2cm; _
1,8cm;1,4cm;2,1cm;1cm"
.ColumnHeads = False
.Font.Size = 10
.RowSource = "Depot!A2:P2" & Zeile
.ListIndex = 0
End With
End With
End Sub
Lieben Gruß Bernd
Anzeige
AW: Fehler 6 "Überlauf"
08.11.2017 17:03:12
Daniel
HI
und welche Zeile verursacht den Fehler?
gib bitte so viele Informationen zum Problem wie möglich.
eine Möglichkeit wäre, dass in dieser Zeile die Umwandlung der Texte in Zahlenwerte nicht sauber funktioniert (du kennst sicherlich das Problem mit deutscher und amerikanischer Darstellung der Zahlen):
TextBox28 = Format(TextBox27.Value / TextBox26.Value, "0.00 %")
ich würde dir da empfehlen, nicht mit den Texten aus den TextBoxen zu rechnen, sondern lieber direkt mit den Zahlenwerten, also
TextBox28 = Format(Application.Sum(.Columns(13) / Application.Sum(.Columns(12), "0.00%")
Gruß Daniel
Anzeige
AW: Fehler 6 "Überlauf"
08.11.2017 17:08:29
Bernd
Hallo Daniel,
nun erhalte ich Fehler 13 Typen unverträglich. Obwohl du recht hast ich habe die drei Codezeile deaktiviert und schon startet die UF. Wie könnte ich vorgehen um die Berechnung erst vorzunehmen, wenn in der Tabelle Werte vorhanden sind?
Lieben Gruß
Bernd
AW: Fehler 6 "Überlauf"
08.11.2017 17:16:05
Daniel
Hi
Bei Fehler 13 steht in einer Zellen ein Fehlerwert und dieser Fehlerwert wird dann auch als Ergebnis der Summe verwendet.
Da musst du mal deine Zellen prüfen, die sollten keine Fehlerwerte (#Div/0, #NV usw) enthalten.
Wenn sich die Fehler nicht vermeiden lassen, müsstest du die Summe mit der Aggregat-Funktion bilde, die kann man so einstellen dass sie Fehlerwerte ignoriert:
...  Worksheetfunction.Aggregate(9, 6, .columns(12)) / Worksheetfunction.Aggregate(9, 6, .columns(13))
Gruß Daniel
Anzeige
AW: Fehler 6 "Überlauf"
08.11.2017 18:15:11
Luschi
Hallo Daniel,
ich habe es noch nie hinbekommen, daß man die Möglichkeiten der Excel-Aggregat-Function auch in Vba mit
WorksheetFunction.Aggregate realisieren kann, denn
- lt. Vba-Hilfe wird als 3. Parameter ein Range-Objekt erwartet
- in der Excel-Funktion kann man aber auch ein Array übergeben
Deshalb ist Dein Vorschlag wohl leider vergebene Liebesmüh.
Gruß von Luschi
aus klein-Paris
AW: Fehler 6 "Überlauf"
08.11.2017 18:37:25
Daniel
Hi Luschi
und warum sollte das nicht funktionieren?
ich kann ja hier problemlos als 3. Parameter ein Rangeobjekt angeben und es wird ja auch keine Matrixberechnung in der Funktion durchgeführt, die dann ein Array als Zwischenergebnis erzeugen würde.
Das Rangeobjekt kann von der Funktion direkt verarbeitet werden.
Von daher sehe ich jetzt keinen Widerspruch zur Hilfe.
Ich habs auch ausprobiert. Funktioniert bei mir wunderbar.
Mit Summe verwende ich aber auch nur eine der "einfachen" Aggregatfunktionen, ohne irgendwelche weitern komplexitäten.
Den einzigen Fehler, den du damit natürlich nicht verhindern kannst ist die Division durch 0, wenn die Summe der Spalte 13 0 ist.
Aber das muss man vorher mit IF abfragen oder ein On Error Resume Next drum basteln.
Gruß Daniel
Anzeige
AW: Fehler 6 "Überlauf"
08.11.2017 21:23:15
Luschi
Hallo Daniel,

Ich habs auch ausprobiert. Funktioniert bei mir wunderbar.
Wenn das wirklich so ist, dann zeige es doch mal an einem praktischen Beispiel.
Danke & Gruß von Luschi
aus klein-Paris
AW: Fehler 6 "Überlauf"
08.11.2017 21:38:34
Daniel
HI
schreib in Zelle A1 eine Zahl und in Zelle B1 eine Zahl
in Zeile 2 kannst du ja einen Div/0- oder NV-Fehler erzeugen.
Lass dann einfach dieses Makro laufen:
Sub test()
With WorksheetFunction
MsgBox Format(.Aggregate(9, 6, Columns(1)) / .Aggregate(9, 6, Columns(2)), "0%")
End With
End Sub
Gruß Daniel
Anzeige
AW: Fehler 6 "Überlauf"
08.11.2017 22:05:39
Luschi
Hallo Daniel,
das ist doch kein praktisches Beispiel, sondern eine verbale Beschreibung.
Immer wieder verlangen die Helfer eine Demo-Datei - na da warte ich mal und bin gespannt!
Gruß von Luschi
aus klein-Paris
AW: Fehler 6 "Überlauf"
08.11.2017 22:20:40
Daniel
HI Luschi
zeig doch mal deinen nicht funktionierenden Text.
ich kann dir ja die Datei hochladen, aber ich muss dann annehmen, dass du wirklich nicht fähig bist, aufgrund meiner Beschreibung eine entsprechende Testdatei aufzubauen.
Willst du das wirklich?
Gruß Daniel
AW: Fehler 6 "Überlauf"
09.11.2017 00:21:43
Daniel
sehe es auch mal so:
wenn du eine xlsm-Datei runter lädst, könnte diese ja auch einen Schadcode enthalten.
Wenn du die Datei selber aufbaust und den Quellcode kopiert, bist du davor sicher.
Das erstellen meiner Beispieldatei von hand geht sicherlich schneller, als die Datei aus dem Internet zu laden und auf Schadcode zu überprüfen.
Gruß Daniel
Anzeige
Ich selten, schon gar nicht bei so etwas! ;-] owT
09.11.2017 00:58:46
Luc:-?
:-?
AW: Max: ja; Zeile: nein
08.11.2017 21:38:55
Fennek
Hallo,
auch wenn ich die Diskussion hier nicht verfolgt habe:
um den Max-Wert einer mit Autofilter gefilterten Tabelle zu bestimmen:

Mx = WSF.Aggregate(4, 5, .Columns(5))
'########### Fehler #####
rr = WSF.Aggregate(14, 7, Row("1:14") / ("E1:E14") = Mx, 1)
hat der Code geklappt,die entsprechende Zeile zu bestimmen, ging im Arbeitsblatt, aber nicht in VBA.
Google brachte nichts. Gibt es da Tips?
mfg
AW: Max: ja; Zeile: nein
08.11.2017 22:56:57
Daniel
Hi
1. kannst du die Schreibweise von Formeln nicht einfach nach VBA übernehmen, du musst da schon die VBA-Spezifische Schreibweise für die Zellbezüge verwenden.
2. VBA kann meines Wissen nach keine Matrixformelberechnungen durchführen.
3. kann ich die Excelfunktion "Zeile/Row" im Katalog der Worksheetfunctions nicht finden.
um dass so auszuführen, müsstest du die vollständige Formel als Text erstellen und dann mit EVALUATE berechnen lassen. Über EVALUATE greift VBA dann auf Excel-Methode zur Formelberechnung zurück und die kann das dann berechnen.
rr =  Evaluate("=AGGREGATE(14,7,ROW(1:14)/(E1:E14=""" & mx & """),1)")
Gruß Daniel
Anzeige
AW: Max: ja; Zeile: nein
09.11.2017 11:30:08
Luschi
Hallo Daniel,
danke für den Tipp und das Beispiel zu Aggregate in Vba.
Gruß von Luschi
aus klein-Paris
Das Bsp ist eine ganz normale Evaluierung, ...
09.11.2017 15:33:25
Luc:-?
…Luschi,
die man mit (nahezu) jedem FmlText machen kann. Also etwas, was du eigentlich kennen müsstest! ;-]
Gruß, Luc :-?
Na, dat'n Ding! Noch'n AGGREGAT-Kuriosum, ...
09.11.2017 03:55:49
Luc:-?
…Folks!
Die MatrixFmlFktionalität ist selbstverständlich eine Eigenschaft des Range-Objekts, was sich ja auch in der dafür geschaffenen Eigenschaft FormulaArray ausdrückt. So wird dem FmlText-Interpreter ja auch nur mitgeteilt, ob er nur einen oder alle Input- u/o sich ergebenden Ergebnis-Werte berück­sichtigen soll. Das geht so natürlich weder anderswo noch in VBA für Work­sheet­Func­tions! Man müsste also erst das entsprd Array separat erzeugen, bevor man eine Xl-Fkt, die in diesem Container enthalten ist, einsetzt. Bekanntlich gibt es dabei ja 2 Methoden, (Appli­ca­tion.)Work­sheet­Func­tion… (mit VBE-Intellisense-Unter­stützung) und nur Application… (ohne diese). Erstere folgt sehr strengen Regeln, was die Argumente der Fkt betrifft und läuft ggf in einen Fehler, letztere ver­wen­det (unter bestimmten Bedingungen) den Fehlerwert. Das führt im Falle von Aggregate kurio­ser­weise dazu, dass erstere niemals Datenfelder (Arrays) als 3.Argument duldet; ja, wenn eine Variable gleich so deklariert wird, meldet sich auch der VBE-Debugger! Bei letzterer passiert dann das nicht und das Ergebnis wird anstandslos so berechnet, wie es auch die ZellFml machen würde. Das deu­tet darauf hin, dass der WorksheetFunction-Container entweder nicht auf die Fktt ≥14 abgestimmt wurde (der VBE-Debugger ohnehin nicht ← mangelhaftes Teamwork bei MS‽) oder dass bei letzterer (Direkt-)Methode bestimmte Input-Kontrollen entfallen. Wahrscheinlich trifft sogar beides zu, denn irgendwoher müssen ja auch die Fehlerwerte bei der Direkt­Methode stammen!
Jedenfalls fktioniert das folgende Bsp analog der Xl-Fml (auch ohne Evaluierung), natürlich nur unter den o.g. Bedingungen:
Sub ArrTestAggregate()
Const mx$ = "x", adBer$ = "E1:E14"
Dim ix As Long, zz As Long, datBer As Range, xZ As Range
On Error Resume Next: Set datBer = Range(adBer)
zz = datBer.Cells.Count: ReDim avDat(1 To zz)
For Each xZ In datBer
ix = ix + 1: avDat(ix) = ix / Abs(xZ = mx)
Next xZ
Debug.Print Application.Aggregate(14, 7, avDat, 1)
Set datBer = Nothing
End Sub
Feedback nicht unerwünscht! Gruß, Luc :-?
„Die Intelligenz ist auf diesem Planeten eine Konstante, die Bevölkerung nimmt aber zu!“ Auch deshalb informieren mit …
Anzeige
Nö, grundsätzliche VBA-Eigenart
09.11.2017 08:53:37
Daniel
Hi
ich denke nicht, dass hier ein spezielles Aggregat-Kuriosum vorliegt.
in der Befehlszeile rr = WSF.Aggregate(14, 7, Row("1:14") / ("E1:E14") = Mx, 1)
übergibt VBA ja nicht den Ausdruck Row("1:14") / ("E1:E14") = Mx an die Aggregat-Funktion, sonderen VBA wird zuerst versuchen, diesen Ausdruck zu berechnen und dann das fertige Berechnungsergebnis an die Funktion übergeben.
Hier hat man dann das Problem, dass die Rechen- und Vergleichsoperatoren +,-,*,/,,= in VBA nur mit Einzelwerten funktionieren und nicht Array-, Matrix- oder Vektortauglich sind.
Das ganze ist also ein allgemeines VBA-Problem und hat nichts mit Aggregat im speziellen zu tun.
Beim SummenProdukt hast du ja das gleiche Problem.
der Ausdruck: WorksheetFunction.SumProduct(Range("A1:A4"), Range("B1:B4")) funktioniert
der Ausdruck: WorksheetFunction.SumProduct(Range("A1:A4") * Range("B1:B4")) funktioniert nicht, sondern erzeugt den TypeMismatch-Error, weil die Multiplikation keine Felder verrechnen kann.
Gruß Daniel
Das ist ja etwas Anderes und für VBA ...
09.11.2017 15:26:02
Luc:-?
…(und wohl auch andere Sprachen) selbstverständlich, Daniel,
weshalb man so etwas nicht in eine VBA-Anweisung einbauen kann. In einer Xl-Fml (Text!) erledigt das der FmlText-Interpreter, in VBA muss man das selber machen.
Das habe ich auch nicht mit Kuriosum gemeint, sondern den gravierenden Unterschied zwischen Application.Aggregate und WorksheetFunction.Aggregate bzgl Argument1≥14. Das meine ich auch deutlich dargelegt zu haben.
Luc :-?
AW: Warum sollte es selbstverständlich
09.11.2017 16:45:49
Daniel
sein, dass solche Operationen in anderen Programmiersprachen keine Felder berechnen können?
sowas kann man doch programmieren, wenn man es will
der Excelformelinterpreter kanns ja auch, wenn man ihn höflich darum bittet.
Gruß Daniel
Eben, wenn das die Sprache vorsieht und ...
09.11.2017 18:05:22
Luc:-?
…folglich auch ihr Compiler, denn auf MaschinenEbene sieht's halt anders aus. So erfolgt bspw eine Addition von Arrays nach den Regeln der linearen Algebra elementweise. Das kann man auf der Ebene einer höheren PgmmierSprache direkt mit einer Schleife lösen wie in VBA oder erst im Compiler-Pgm. Das hängt vom metasprachlichen Niveau der jeweiligen Sprache, also ihrem Abstrak­tions­grad ab.
Man kann natürlich die Wirkung eines fertigen speziellen Pgms (zB FormelText-Interpreter) nicht mit einer allgemeinen Pgmmier­Spra­che vgln, denn letztlich ist dieses Pgm ja auch in einer bestimmten Sprache geschrieben worden, an deren SyntaxRegeln es sich halten muss. Gleiches gilt schließlich auch für VBA-Pgmm. Man kann den Interpreter also nur mit einem anderen Pgm, nicht aber mit einer Sprache an sich vgln!
Luc :-?
AW: ja sag ich doch, es ist eben nicht ...
09.11.2017 18:13:40
Daniel
... selbstverständlich, sondern immer so, wie die Programmierer der jeweiligen Sprache es vorgesehen haben.
Gruß Daniel
Eine Sprache wird nicht pgmmiert, ...
09.11.2017 18:51:02
Luc:-?
…sondern ihre Begriffe und ihre Syntax festgelegt/entwickelt/konstruiert. Pgmmiert wird dann der zugehörige Compiler, der ihre Anweisungen in ausführbare Form bringt. Je abstrakter die Sprache, desto komplexer wird das Compiler-Pgm. Bei (teilweise) zur Laufzeit interpretierten Sprachen hält man das idR einfacher → mehr Arbeit für den Pgmmierer.
Luc :-?
Pars pro toto, luc
09.11.2017 19:45:43
Daniel
Ich muss ja nicht jeden Teilschritt einzeln aufführen.
Pars pro toto, luc
09.11.2017 23:37:54
Daniel
Ich muss ja nicht jeden Teilschritt einzeln aufführen.
Jute Idee, setzick gleima um! :-]
10.11.2017 00:38:08
Luc:-?
Wu ga ni da du ei Fr de Te bi da eh du ge st au Ga zu da ja au ty de (t þi de Nu gi es in de Re nu ei je Sp ab un Um me Co re In da Un er di vi Pr di mi ih ge we – al Te vo Ga
Die scheinbar fehlenden Teile sind im virtuell-sensitiven (Maus-)Raum gelandet… :-]
Luc :-?
AW: Na, dat'n Ding! Noch'n AGGREGAT-Kuriosum, ...
09.11.2017 10:53:54
Daniel
nicht sinnvoll, Arrays als 3. Argument der Aggregatfunktion zu verwenden.
Schließlich soll es mit Aggregat möglich sein, bei der Berechnung der Werte ausgeblendete Zellen auszuschließen und das geht natürlich nur mit einem Range-Objekt als Parameter.
Wenn man jetzt die Matrixfähigkeit der Aggregat-Funktion in den Funktionen >=14 ausnutzt, sollte man sich darüber klar sein, dass die Funktion damit die Fähigkeit verliert, ausgeblendete Zellen zu erkennen und zu ignorieren.
Gruß Daniel
Damit teilst du mir nichts neues mit, ...
09.11.2017 15:25:18
Luc:-?
…Daniel,
denn damit hatte ich mich schon längst befasst, in einschlägigen Diskussionen im Archiv nachzulesen (vgl auch meine UDF AggregateXk). Das ist ja gerade der Widersinn bei AGGREGAT, warum nicht generell so (vgl TEILERGEBNIS) oder so wie ab FNr 14‽
Luc :-?
AW: Feedback und Danke
09.11.2017 10:12:41
Fennek
Hallo,
zuerst vielen Dank für die Antworten.
Daniels Ansatz funktioniert, aber nur wenn der Wert der Variablen in der eng. Schreibweise, also mit "." anstelle des dt "," eingeben wird. Dies im Vorfeld als String zu bilden, habe ich nicht hinbekommen.
Luc's Ansatz funktioniert perfekt, erscheint aber eher "witzlos", da, wenn der Max-Wert bekannt, auch eine Schleife die den Max-Wert und Rows.hidden prüft, zum selben Ergebnis führt.
Am Ende habe ich auch im Arbeitsblatt es nicht hinbekommen, mit Aggregat die Zeile zu bestimmen fall der Suchwert mehrfach vorkommt.
Da habe ich noch viel zu lernen.
mfg
https://www.herber.de/bbs/user/117541.xlsm
(Der Anstz: VBA filtert alle Varianten der Spalte A und soll die jeweilige Zeile des sichtbaren Max-Wertes aus Spalte E finden)
Mein Bsp war nicht als Lösung deines Bsps ...
09.11.2017 15:30:01
Luc:-?
…gedacht, Fennek,
sondern zur DeutlichMachung, dass und wie Aggregate in VBA Datenfelder verarbeiten kann. Außerdem ist daraus ersichtlich, dass das nur direkt mit Application fktioniert, nicht mit Worksheet­Function!
Gruß, Luc :-?
AW: Fehler 6 "Überlauf"
08.11.2017 16:54:46
Daniel
Hi
du musst das halt so programmieren, dass der Fehler nicht mehr auftritt.
wenn der Fehler nur auftritt wenn die Tabelle leer ist, musst du eben vorher abfragen, ob die Tabelle leer ist oder nicht und die Fehlerverursachende Aktion nur ausführen, wenn nicht.
um festzustellen, ob die Tabelle leer ist, sollte es reichen zu überprüfen ob die obere linke Zelle der Tabelle leer ist oder nicht.
ansonsten kommt der Fehler 6, wenn du einer als Zahl deklarierten Variable (Byte, Integer, Long) einen Zahlenwert zuweist, der ausserhalb des des Gültigkeitsbereichs liegt.
Beispielsweise:
Dim x as Integer
x = 40000
oder:
dim x as Byte
x = -1
Dh. du solltest mal schauen, in welcher programmzeilde der Fehler auftritt, welche Variablen betroffen sind und wie diese deklariert sind.
Gruß Daniel
AW: Fehler 6 "Überlauf"
08.11.2017 16:58:45
Bernd
Hallo Daniel,
Danke für deine Hilfe.
Die UF startet erst gar nicht. Schau dir mal den Code an, den ich gerade gepostet hatte.
Lieben Gruß
Bernd
AW: Fehler 6 "Überlauf"
08.11.2017 17:04:08
Daniel
Hi
dann musst du mal vor dem Start der Userform einen Haltepunkt setzen und von dort im Einzelstep durchgehen.
Gruß Daniel
AW: Fehler 6 "Überlauf"
08.11.2017 17:16:24
Bernd
Hallo Daniel,
ich habe es dank deiner Denkanstöße hin bekommen und zwar habe ich folgende Code Zeile vor den Berechnungen der TextBoxen eingefügt:
If Sheets("Depot").Range("A2").Value = "" Then GoTo weiter
Jetzt geht es!
Danke dir sehr!!!
Lieben Gruß
Bernd
AW: Fehler 6 "Überlauf"
08.11.2017 17:24:53
Daniel
Hi
da du eine Division durchführst, musst du darauf achten dass der Divisor nicht 0 ist.
Gruß Daniel

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige