Microsoft Excel

Herbers Excel/VBA-Archiv

Überlauf Problem 6

Betrifft: Überlauf Problem 6 von: Showd0wn
Geschrieben am: 29.07.2014 09:46:10

Hallo,

ich habe ein Problem mit dem Überlauf. Ich habe ziemlich viele Zeile (ca. 3500) und Spalten bis BC. Anfangs (mit ca. 2500 Zeilen) hat das alles problemlos funktioniert. Jetzt kommt aber bei der zweiten kursiven Zeile ein Überlauf Fehler.
Anfangs hatte ich auch nur eine Range von A:BC, wengen des Überlaufes habe ich gedacht, splitte ich das und mache 2 Range Objekte (var_Daten & var_Daten_Erweiterung). Aber auch das klappt nicht, bei dem 2. Objekt kommt immer ein Überlauffehler. Auch wenn ich in das 2. Objekt nur eine Zeile lege und in das erste alle anderen, kommt der Überlauffehler beim 2.

Wie kann ich das Problem lösen?

hier mein Code:

Dim i, j, k As Integer
Dim lng, row_Mas, row_Mas_2 As Double
Dim var_Daten, var_Daten_Erweiterung, var_Mas As Variant
Dim wksDaten As Worksheet

Const cstrDat As String = "*****"

Set wksDaten = Workbooks.Open(cstrDat).Sheets("***")
Windows(wksDaten.Parent.Name).Visible = False
ThisWorkbook.Activate

lng = wksDaten.Cells(Rows.Count, 3).End(xlUp).Row
var_Daten = wksDaten.Range("A9:AK" & lng).Value
row_Mas = Tabelle1.Cells(Rows.Count, 2).End(xlUp).Row
var_Mas = Tabelle1.Range("B4:U" & lng).Value


j = 4
For i = 1 To (lng - 8)
Tabelle1.Cells(j, 2).Value = var_Daten(i, 3)
Tabelle1.Cells(j, 3).Value = var_Daten(i, 5)
Tabelle1.Cells(j, 4).Value = var_Daten(i, 7)

j = j + 1
Next

var_Daten_Erweiterung = wksDaten.Range("AL9:BC" & lng).Value j = 4
For i = 1 To (lng - 8)
Tabelle1.Cells(j, 10).Value = var_Daten_Erweiterung (i, 3)
Tabelle1.Cells(j, 11).Value = var_Daten_Erweiterung (i, 4)
Tabelle1.Cells(j, 12).Value var_Daten_Erweiterung (i, 5)
...
Next



Gruß

  

Betrifft: AW: Überlauf Problem 6 von: Hajo_Zi
Geschrieben am: 29.07.2014 09:52:39

Zeilen sollte man immer als Long definieren, da mehr als 32 tausend möglich.

GrußformelHomepage


  

Betrifft: AW: Überlauf Problem 6 von: Nepumuk
Geschrieben am: 29.07.2014 10:04:39

Hallo,

Und täglich Grüßt das Murmeltier.

Wie viele Jahrzehnte mögen noch ins Land gehen, bis auch der letzte mitbekommen hat dass das:

Dim i, j, k As Integer

FALSCH ist. Die Variable k ist in dem Fall ein Integer, i und j aber ein Variant weil du keine Angaben zur Dimension machst. Also:

Dim i As Integer, j As Integer, k As Integer

Ich hab schon in verschiedenen Sprachen programmiert, das ist immer so. Bzw. mir ist noch keine untergekommen in der das anders wäre.

Wobei du diesen Datentyp grundsätzlich meiden solltest außer du hast eine Funktion welche einen Integer-Wert zurück gibt oder erwartet. Die 6 gesparten Bytes für die 3 Variablen, im Vergleich zum Long-Datentyp, spielen bei 512MB die du für das VBA-Projekt zur Verfügung hast keine Rolle. Deine Tabelle hat 1.048.576 Zeilen, Integer reicht aber nur bis 32.767 also nur für das erste Drittel der Tabelle. Aber das nur am Rande.

Welchen Wert hat die Variable "lng" wenn der Fehler ausgelöst wird?

Gruß
Nepumuk


  

Betrifft: AW: Überlauf Problem 6 von: {Boris}
Geschrieben am: 29.07.2014 11:52:07

Deine Tabelle hat 1.048.576 Zeilen, Integer reicht aber nur bis 32.767 also nur für das erste Drittel der Tabelle.

So ein Verschreiber aus Deinem "Munde" - historisch! ;-))

VG, Boris


  

Betrifft: Easy, Boris... 3.12% sind doch fast 1 Drittel ;-) von: EtoPHG
Geschrieben am: 29.07.2014 12:59:52




  

Betrifft: AW: Überlauf Problem 6 von: Showd0wn
Geschrieben am: 29.07.2014 14:46:31

Danke für die vielen Anworten, aber leider funkioniert das immer noch nicht. Egal ob ich i, j als Long mache oder als Variant, immer wieder Laufzeitfehler '6' Überlauf. (Und auch lng,row_Mas, row_Mas_2 habe ich probiert in Long oder Variant zu ändern)

Dim i, j, k As Long: das sind meine Zählvariablen für die Zeilen (k, wird erst später gebraucht, das ist in diesem ersten Teil nicht relevant)
Dim lng, row_Mas, row_Mas_2 As Long: das ist jeweils die letzte Zeile der Datei (row_Mas_2 wird ebenfalls erst später gebraucht)

Noch eine Idee woran das liegen könnte?


  

Betrifft: Lad mal die Datei... von: {Boris}
Geschrieben am: 29.07.2014 15:08:32

Hi,

...hoch - abgespeckt auf das Problem.

VG, Boris


  

Betrifft: Aus deinem Code geht ansonsten nicht hervor, ... von: Luc:-?
Geschrieben am: 29.07.2014 15:26:12

…wo der Fehler sonst noch liegen könnte, ShowD0wn,
zumal wir ja auch deine Daten nicht kennen. Allerdings scheinst du Nepumuks Bemerkungen nicht beachtet und seine Frage nicht beantwortet zu haben.
Merke: Man kann wohl in kaum einer PgmierSprache einen Datentyp summarisch mehreren Variablen zuweisen, also i, j, k As Long. Das müsste dann wohl eher entweder (i, j, k) As Long heißen, was dir die VBE-SyntaxKontrolle aber nicht durchgehen lässt, oder es müsste 2 Arten von ListenTrennzeichen geben → 1× für die reine Aufzählung von Zusammengehörigem und 1× für die Aneinanderreihung von nicht direkt Zusammengehörigem (formal ähnlich wie in J[ava]Script).
Richtig wäre hier also i As Long, j As Long, k As Long oder die Benutzung der Kurz­deklarations­zeichen wie bspw nachgestelltes $ anstelle von As String. Eine weitere alternative Methode wäre die globale Deklaration nach Anfangs­buch­staben des Namens, die es schon im alten Basic gab. Das muss aber auf Modul­Ebene festgelegt und kann auch für einzelne Variablen auf Prozedur­Ebene per vollständiger Deklaration außer Kraft gesetzt wdn. Bei Weglassung des Datentyps wird der Daten­typ dann also anhand des 1.Namens­buch­stabens festgelegt und ist nur Variant, wenn das auch dasteht.
Aber das scheint ja nicht das Überlauf verursachende Problem zu sein…
Gruß, Luc :-?

Besser informiert mit …


  

Betrifft: bitte um Beispiel von: Tino
Geschrieben am: 02.08.2014 13:07:57

Hallo,

Bei Weglassung des Datentyps wird der Daten­typ dann also anhand des
1.Namens­buch­stabens festgelegt und ist nur Variant, wenn das auch dasteht.


Kannst Du dafür mal ein Beispiel zeigen?

Gruß Tino


  

Betrifft: AW: bitte um Beispiel von: EtoPHG
Geschrieben am: 03.08.2014 16:01:12

Hallo Tino,

Schau doch mal in die VBA-Hilfe unter Deftype-Anweisungen.

Gruess Hansueli


  

Betrifft: Genau, da sind genug Bspp! ;-) Gruß owT von: Luc:-?
Geschrieben am: 03.08.2014 16:46:52

:-?


  

Betrifft: ok. danke! von: Tino
Geschrieben am: 03.08.2014 16:47:15




  

Betrifft: AW: Überlauf Problem 6 von: Showd0wn
Geschrieben am: 29.07.2014 15:06:26

Danke für die vielen Anworten, aber leider funkioniert das immer noch nicht. Egal ob ich i, j als Long mache oder als Variant, immer wieder Laufzeitfehler '6' Überlauf. (Und auch lng,row_Mas, row_Mas_2 habe ich probiert in Long oder Variant zu ändern)

Dim i, j, k As Long: das sind meine Zählvariablen für die Zeilen (k, wird erst später gebraucht, das ist in diesem ersten Teil nicht relevant)
Dim lng, row_Mas, row_Mas_2 As Long: das ist jeweils die letzte Zeile der Datei (row_Mas_2 wird ebenfalls erst später gebraucht)

Noch eine Idee woran das liegen könnte?


  

Betrifft: AW: Überlauf Problem 6 von: Rudi Maintaire
Geschrieben am: 29.07.2014 10:12:58

Hallo,
wegen des Überlaufes habe ich gedacht, splitte ich das
es gibt keinen Grund, warum der Bereich nicht komplett in ein Array eingelesen werden kann.

Überlauf=Fehler in der Variablendeklaration.
Alle numerischen Var, die Zeilen/ Spalten betreffen As Long.

Gruß
Rudi


  

Betrifft: AW: Überlauf Problem 6 von: Daniel
Geschrieben am: 29.07.2014 13:07:19

Im prinzp kannst du Ganzzahlvariablen immer als LONG deklarieren und das INTEGER komplett streichen.
Auf nem 32-Bit-Rechner hat der Typ Integer keine Vorteile, auch nicht in der Rechengeschwindigkeit, weil eine 32-Bit-Maschine den Typ Long mit 32-Bit ebenfalls in einem Prozessortakt verarbeiten kann.



Gruß Daniel


  

Betrifft: AW: Überlauf Problem 6 von: Daniel
Geschrieben am: 29.07.2014 15:17:11

HI
in welcher Zeile tritt der Fehler auf und was ist das 2. Objekt?

Gruß Daniel


  

Betrifft: AW: Überlauf Problem 6 von: Showd0wn
Geschrieben am: 29.07.2014 15:29:47

Sorry für den Doppelpost.
Habe nochmal ein bisschen probiert mit den Datentypen, aber es klappt nicht. Habe jetzt alles als Long (außer natürlich Variant). Die maximale Zeilenanzahl liegt irgendwo zwischen 1250-1300 Danach kommt der Überlauffehler


  

Betrifft: AW: Überlauf Problem 6 von: Daniel
Geschrieben am: 29.07.2014 15:52:10

wie wäre es, wenn du einfach mal folgende Fragen beantwortest:
1. in welcher Zeile tritt der Fehler auf?
2. welche Werte haben dann die Variablen?
das Hochladen der Datei wäre auch hilfreich.
ansonsten ist jeder weitere Beitrag hier überflüssig.

Gruß Daniel


  

Betrifft: AW: Überlauf Problem 6 von: Showd0wn
Geschrieben am: 29.07.2014 17:45:05

Wie meinst das in welcher Zeile der Fehler auftritt?
Wie gesagt, bei der Zeile "var_Daten = wksDaten.Range("A9:AK" & lng).Value" kommt der Fehler. Bisher gibt es ja gar keine Variablen, da das Programm nicht soweit kommt.
nur die lng Varaible wird definiert. Die hat den Wert der letzten Zeile, irgendwas zwischen 1250-1300, genauer habe ich das noch nicht eingeschränkt.
Die Datei ist zum einen sehr groß und enthällt vertrauliche Daten, weshalb ich sie leider nicht hochladen kann.


  

Betrifft: AW: Überlauf Problem 6 von: {Boris}
Geschrieben am: 30.07.2014 14:12:08

Hi,

daher hatte ich auch geschrieben: Hochladen - abgespeckt auf das Problem.

Schmeiss alles raus aus der Datei.

VG, Boris


  

Betrifft: AW: Überlauf Problem 6 von: Showd0wn
Geschrieben am: 31.07.2014 10:04:49

Update: Ich habe nach langer Suche den Fehler gefunden. In EINER Zelle von 3500*60 Zellen, steht ein ungültiger Wert. Es ist eine Zelle im Datum-Format, aber das Datum wurde ohne Punkte eingeben also z.B. 12122012 anstelle von 12.12.2012. Deshalb hat Excel diesen Wert nicht anzeigen können und es stand nur XXXXXXXXX in der Zelle.
So ein Fehler kann ab und zu vorkommen, bei der Eingabe so vieler Zeilen. Kann ich mein Code irgendwie anpassen, so dass auch ein ungültiger Wert übernommen wird?"


  

Betrifft: Nimm .Value2 statt .Value (owT) von: EtoPHG
Geschrieben am: 31.07.2014 12:30:19




 

Beiträge aus den Excel-Beispielen zum Thema "Überlauf Problem 6"