Clever-Excel-Forum

Normale Version: Laufzeitfehler 6
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
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! :)
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!
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.
(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
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
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
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:
[quote pid='129142' dateline='1533274356']
Wow funktioniert bestens! Habt vielen Dank!
[/quote]
Also bei mir lief das Makro..
hi,

Zitat:Also bei mir lief das Makro..




jo,  Käpsele. Dann setze mal einen Wert in A40000 und probiere es nochmal!
Seiten: 1 2