2016-03-31 19 views
0

Dieser Code zweimal Schleifen, stoppt dann mit einem Fehler „Anwendung definiert oder Objekt definiert Fehler“Fehler „Anwendung definiert oder Objekt definiert Fehler“ in Excel-Makro

Sub addsheet() 
Dim Copyrange As String 
Dim Copyrange2 As String 
Dim lastRow As Long 
lastRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row 
MsgBox lastRow 
Dim newsheet 
Set newsheet = Sheets.Add(After:=Sheets(Worksheets.Count), Count:=1, Type:=xlWorksheet) 
newsheet.Name = "Consol" 
Startrow = 1 
Do While Not IsEmpty(Worksheets("Sheet1").Range("E1").Value) 
For i = Startrow To lastRow 
     For j = 1 To 1 
      Worksheets("Consol").Cells(i, j) = Worksheets("Sheet1").Range("E1").Value 
     Next j 
     Next i 

    Let Copyrange = "B" & Startrow & ":" & "F" & lastRow 
    Let Copyrange2 = "A1" & ":" & "E" & lastRow 
    Worksheets("Consol").Range(Copyrange).Value = Worksheets("Sheet1").Range(Copyrange2).Value 
    Columns("E").Delete 
    Startrow = Startrow + lastRow 
    lastRow = lastRow + lastRow 
Loop 
End Sub 
+1

'Für j = 1 Zu 1'? – findwindow

+0

ja so wird es nur in Spalte 1 bleiben. –

+0

Dann brauchen Sie diese Schleife nicht, wenn Sie nur eine Spalte runtergehen XD – findwindow

Antwort

0

Sie bekommen Ihre Fehler, weil Sie aren‘ t die Exitbedingung für die Schleife erfüllt, bevor sie maximal 21 Mal ausgeführt wird (und anschließend die Anzahl der Zeilen in einer Excel-Tabelle überschreitet). Sie haben richtig lastRow Satz als Long, so dass die Variable nicht überlaufen, aber diese Codezeile ...

lastRow = lastRow + lastRow 

... Doppel die Zeilenanzahl Sie versuchen, jedes Mal zu adressieren durch die Schleife. Der Anwendungsfehler tritt auf, wenn Sie versuchen, auf eine Zelle in einer Zeile höher als das Maximum von 1048576 zuzugreifen. Wenn Sie also mit einem lastRow von 1 beginnen, wird es sich 21 Mal verdoppeln, bevor es höher als 1048576 ist. Wenn Sie mit mehr als beginnen 1 Reihe geht es viel schneller.

Ich habe Ihren Code viel weiter, als dass nicht untersucht, aber Sie wahrscheinlich brauchen nur ein anderen Zeilenzähler innerhalb der Schleife zu verwenden:

Ungeprüfte:

Startrow = 1 
Dim currentEnd As Long 
currentEnd = lastRow 
Do While Not IsEmpty(Worksheets("Sheet1").Range("E1").Value) 
    For i = Startrow To currentEnd 
     Worksheets("Consol").Cells(i, 1) = Worksheets("Sheet1").Range("E1").Value 
    Next i 

    Copyrange = "B" & Startrow & ":" & "F" & lastRow 
    Copyrange2 = "A1" & ":" & "E" & lastRow 
    Worksheets("Consol").Range(Copyrange).Value = Worksheets("Sheet1").Range(Copyrange2).Value 
    Columns("E").Delete 
    lastRow = currentEnd + lastRow 
    Startrow = lastRow 
Loop 
+0

Hallo Komintern, danke für die Antwort –

Verwandte Themen