2016-06-02 11 views
2

Ich habe eine Schleife nach unten in meinem Code, die erfolgreich meine Daten durchläuft und alle Zeilen mit Spalte H = 0 löscht.Excel VBA - Löschen von Zeilen mit Zellwerten in Spalte B, in denen Referenzfehler enthalten sind

Es gibt jedoch mehrere Zellen in Spalte B, die #REF! anzeigen. Ich möchte auch, dass diese Schleife diese Zeilen auf die gleiche Weise wie die 0 in Spalte H löscht.

Ich denke, mein Problem ist nicht zu wissen, wie diese Art von Fehlern zu verweisen. Das Behandeln von #REF! wie eine Zeichenfolge scheint nicht zu funktionieren.

Vielen Dank!

Sub test() 

Dim currentSht As Worksheet 
Dim lastRow As Long 
Dim lastCol As Long 
Dim startCell As Range 
Dim r As Integer 

Set startCell = Sheets("Sheet1").Range("A1") 
Set currentSht = ActiveWorkbook.Sheets("Sheet1") 

lastRow = startCell.SpecialCells(xlCellTypeLastCell).Row '<~~ Not sure why, but do not use "Set" when defining lastRow 
lastCol = startCell.SpecialCells(xlCellTypeLastCell).Column 

For r = 1 To lastRow Step -1 
    If currentSht.Cells(r, "H").Value = 0 Or currentSht.Cells(r, "B").Text = "#REF!" Then 
    Rows(r).Select 
    Selection.EntireRow.Delete 
End If 
Next r 

currentSht.Range(startCell, currentSht.Cells(lastRow, lastCol)).Select 

End Sub 
+3

Try 'IsError (currentSht.Cells Linie (r, "B")) statt. –

+0

können Sie auch die Löschzeilen mit 'Zeilen (r) .Delete' kombinieren –

+0

Anstatt die Eigenschaft 'Value' zu ​​prüfen, überprüfen Sie die Eigenschaft' Text'. Das sollte die '#REF!' - Zeichenfolge zurückgeben. –

Antwort

0

Ich glaube, ich sehe Ihr Problem:

For r = 1 To lastRow Step -1 

ändern, die

For r = lastrow to 1 Step -1 
+0

JA! Das war's. funktioniert jetzt perfekt, danke –

0

Wie diesen Code:

Sub Delete0() 

Dim F As Integer 
Dim Y As Integer 
Dim RngCount As Range 


Set RngCount = ActiveSheet.Range("H:H") 
Y = Application.WorksheetFunction.CountA(RngCount) 

For F = Y To 1 Step -1 

If IsError(ActiveSheet.Range("H" & F)) Then 
ActiveSheet.Rows(F).EntireRow.Delete 
ElseIf ActiveSheet.Range("H" & F).Value = 0 Then 
ActiveSheet.Rows(F).EntireRow.Delete 
End If 


Next F 

End Sub 
+0

Gleiches Problem. Es hat die #REF nicht gelöscht! Zellen. –

+0

Ok, lass mich das wirklich schnell testen. –

+0

@VBAPete Ich würde nicht erwarten, dass es funktioniert. Die .Value -Eigenschaft dieser Zelle wäre Fehler 2023 –

Verwandte Themen