2016-03-22 10 views
1

Ich habe ein Makro, das 0 anstelle von leeren Zeilen gibt es mehr als 65000 von ihnen alles funktioniert gut, aber Problem ist Makro stoppt bei Zeile 62000, auch wenn Daten auf eine nächste Reihe. Hier ist der Code:VBA-Makro geht nicht an das Ende der Datei Excel

Sub QuickCull() 
    On Error Resume Next 
    Columns("a").SpecialCells(xlBlanks).EntireRow.Delete 
    Columns("b").SpecialCells(xlBlanks).EntireRow.Delete 
    Columns("d").SpecialCells(xlBlanks).EntireRow.Delete 

    Dim col As Range 
    Set col = Cells(Rows.Count, "E").End(xlUp) 

    Dim r As Range 
    Set r = Range("E2", col).Resize(, 4) 

    Dim cell As Range 
    For Each cell In r 
     If cell.Value = "" Then 
      cell.Value = 0 
     Else 
      cell.Value = 1 
     End If  
    Next cell 

    Cells("J1").Activate 

End Sub 

Es scheint mir Problem ist mit Bereichen, aber nicht sicher, überhaupt. Was könnte das verursachen?

+1

Entfernen Sie 'On Error Resume Next' und debuggen Sie erneut. – 0m3r

+1

'On Error Resume Next' kann für die ersten drei Codezeilen benötigt werden, sollte aber unmittelbar danach auf 'On Error GoTo 0' zurückgesetzt werden. – Jeeped

+0

Fertig, aber das Ergebnis ist das gleiche ... – user3237076

Antwort

1

Die Range.Cells property akzeptiert nicht die gleiche Art von Zelladressreferenzen, die eine Range object tut.

Cells("J1").Activate 
'should be, 
Range("J1").Activate 

Wenn Spalten E: H ihre Werte mit auf 1 geändert und deren Zuschnitte auf 0 geändert, dann können Sie mit der weiter Range.SpecialCells methodxlCellTypeBlanks und xlCellTypeConstants verwenden.

Sub QuickCull() 
    Dim col As Range, r As Range 

    With Worksheets("data") '<~~ you should know ehat worksheet you are on! 
     On Error Resume Next 
     .Columns("a").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
     .Columns("b").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
     .Columns("d").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 

     Set col = .Cells(Rows.Count, "E").End(xlUp) 
     Set r = .Range("E2", col).Resize(col.Row - 1, 4) 

     r.SpecialCells(xlCellTypeConstants) = 1 
     r.SpecialCells(xlCellTypeBlanks) = 0 

     .Range("J1").Activate '<~~ or .Cells(4, "J").Activate 
    End With 
End Sub 
+0

Greate aber Problem bleibt gleich – user3237076

Verwandte Themen