Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Laufzeitfehler 6
#1
Hallo,
Ich muss für meine Arbeit große Datensätze verarbeiten mit deutlich über 300.000 Zeilen. Dazu möchte ich gern in einer Spalte eine Nummerierung von 1 bis zur letzten beschriebenen Zeile vornehmen und habe mir diesbezüglich folgendes Makro geschrieben:

Option Explicit


Sub Hauptprogramm()

Dim Spalte As Integer
Dim StartWert As Integer
Dim StartZeile As Variant
Dim LetzteZeile As Variant

Dim i As Integer

Spalte = 8
StartWert = 1
StartZeile = 39
LetzteZeile = Cells(Rows.Count, "A").End(xlUp).Row
'Cells(Rows.Count, "A").End(xlUp).Row

For i = StartZeile To LetzteZeile
    Cells(i, Spalte).Value = StartWert
    StartWert = StartWert + 1
Next i

End Sub


Wenn ich das Makro ausführen will bekomme ich den Laufzeitfehler 6 angezeigt. Hat jemand eine Idee woran das liegen könnte? Über lösungsvorschläge wäre ich sehr dankbar! :)
Antworten Top
#2
Wenn die Variable "Startzeile" größer ist als die Variable "Letzte Zeile" ist ein "for i = Startzeile to Letztezeile" nicht möglich! Außer du lässt rückwärts zählen mit "Step -1"

Sonst klappt das einwandfrei!
Eine Menge reden, aber nichts sagen können viele...
Antworten Top
#3
Hallo S...,

"Laufzeitfehler 6" bedeutet Überlauf.

Der Datentyp "Integer" kann nur Ganzzahlen von -32.768 bis 32.767.
Generell solltest du für Zeilen- und Spaltennummern den Datentyp "Long" (von -2.147.483.648 bis 2.147.483.647) nutzen.
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Antworten Top
#4
(02.08.2018, 22:40)Frogger1986 schrieb: Wenn die Variable "Startzeile" größer ist als die Variable "Letzte Zeile" ist ein "for i = Startzeile to Letztezeile" nicht möglich! Außer du lässt rückwärts zählen mit "Step -1"

Sonst klappt das einwandfrei!

Die Variable Startzeile ist ja nur 39. Die Variable LetzteZeile soll ja die letzte beschriebene Zeile im Dokument abbilden, das wäre dann 332.000.
Von daher müsste das doch eigentlich passen?  Huh
Antworten Top
#5
Moin!
Zunächst mal hat Dir Ego ja den Überlauf erklärt.
ABER:
Ich mag mir gar nicht vorstellen, wie lange dieses Kleinod von Makro bei 330.000 Zeilen durchrödelt …
5 Minuten?

Hier mal zwei Varianten, die das Gleiche machen, aber höchstens 0,1 Sekunden benötigen:

1. Formel-Lösung, Formel gegen Wert getauscht:

Sub Formel()
With Range("H39:H" & Cells(Rows.Count, 1).End(xlUp).Row - 38)
  .Formula = "=Row(A1)"
  .Copy: .PasteSpecial xlPasteValues
End With
End Sub

2. Datenreihe, nochmal erheblich schneller:

Sub Datenreihe()
Dim Letzte As Long
Letzte = Cells(Rows.Count, 1).End(xlUp).Row - 38
With Range("H39")
  .Value = 1
  .Resize(Letzte, 1).DataSeries
End With
End Sub


Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • Sandrof90
Antworten Top
#6
Hallo Sandrof90,

der Überlauf bezieht sich auf die beiden Variablen i und StartWert
So geht es, aber die Lösung von Ralf ist ein mehrfaches Schneller.

Code:
Sub Hauptprogramm()
   Dim Spalte      As Integer
   Dim StartZeile  As Integer
   Dim StartWert   As Long
   Dim LetzteZeile As Long
   Dim i           As Long
   
   Spalte = 8
   StartWert = 1
   StartZeile = 39
   LetzteZeile = Cells(Rows.Count, "A").End(xlUp).Row
   
   For i = StartZeile To LetzteZeile
       Cells(i, Spalte).Value = StartWert
       StartWert = StartWert + 1
       
   Next i

End Sub
[-] Folgende(r) 1 Nutzer sagt Danke an hddiesel für diesen Beitrag:
  • Sandrof90
Antworten Top
#7
Oops, Karl war schneller …

Um Deinen Einwand zu erklären:
(03.08.2018, 05:10)Sandrof90 schrieb: Die Variable Startzeile ist ja nur 39.
Richtig! :19:
Es geht bei Dir aber um die Laufvariable i, die falsch als Integer deklariert ist!
Ich rate Dir aber dringend, Dir meine Vorschläge genau anzuschauen.
Allgemein:
Nutze IMMER eingebaute Excel-Methoden (auch per VBA)!
Die Jungs von MS können nämlich besser als wir programmieren … :21:
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • Sandrof90
Antworten Top
#8
[quote pid='129142' dateline='1533274356']
Wow funktioniert bestens! Habt vielen Dank!
[/quote]
Antworten Top
#9
Also bei mir lief das Makro..
Eine Menge reden, aber nichts sagen können viele...
Antworten Top
#10
hi,

Zitat:Also bei mir lief das Makro..




jo,  Käpsele. Dann setze mal einen Wert in A40000 und probiere es nochmal!
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste