VBA-Code zum Entfernen leerer Zellen

VBA-Code zum Entfernen leerer Zellen

Irgendeine Idee, warum das nicht funktioniert? Ich bekomme immer Laufzeitfehler 1004: Anwendungsdefinierter oder objektdefinierter Fehler. Ich versuche, einen ganzen Zeilenabschnitt zu löschen, wenn die erste Zelle leer ist, und dann, wenn sie nicht leer ist, alle leeren Zeilen zu löschen, bis eine Zeile mit Werten übrig bleibt. Das dient nur dazu, eine Tabelle einfach zu bereinigen. Ich habe den Code angehängt.Bildbeschreibung hier eingeben

Private Sub checkRows()

'H or 8
If IsEmpty(Range("A827").Value) = True Then
    Rows("825:925").EntireRow.Delete XlDeleteShiftDirection.xlShiftUp
Else
    Rows("827:925").Select
    Selection.EntireRow.SpecialCells(xlBlanks).EntireRow.Delete
End If

'G or 7
If IsEmpty(Range("A725").Value) = True Then
    Rows("723:823").EntireRow.Delete XlDeleteShiftDirection.xlShiftUp
Else
    Rows("725:823").Select
    Selection.EntireRow.SpecialCells(xlBlanks).EntireRow.Delete
End If

'F or 6
If IsEmpty(Range("A623").Value) = True Then
    Rows("621:721").EntireRow.Delete XlDeleteShiftDirection.xlShiftUp
Else
    Rows("623:721").Select
    Selection.EntireRow.SpecialCells(xlBlanks).EntireRow.Delete
End If

'E or 5
If IsEmpty(Range("A521").Value) = True Then
    Rows("519:619").EntireRow.Delete XlDeleteShiftDirection.xlShiftUp
Else
    Rows("521:619").Select
    Selection.EntireRow.SpecialCells(xlBlanks).EntireRow.Delete
End If

'D or 4
If IsEmpty(Range("A419").Value) = True Then
    Rows("417:517").EntireRow.Delete XlDeleteShiftDirection.xlShiftUp
Else
    Rows("419:517").Select
    Selection.EntireRow.SpecialCells(xlBlanks).EntireRow.Delete
End If

'C or 3
If IsEmpty(Range("A317").Value) = True Then
    Rows("315:415").EntireRow.Delete XlDeleteShiftDirection.xlShiftUp
Else
    Rows("317:415").Select
    Selection.EntireRow.SpecialCells(xlBlanks).EntireRow.Delete
End If

'B or 2
If IsEmpty(Range("A215").Value) = True Then
    Rows("213:313").EntireRow.Delete XlDeleteShiftDirection.xlShiftUp
Else
    Rows("215:313").Select
    Selection.EntireRow.SpecialCells(xlBlanks).EntireRow.Delete
End If

'A or 1
If IsEmpty(Range("A113").Value) = True Then
    Rows("111:211").EntireRow.Delete XlDeleteShiftDirection.xlShiftUp
Else
    Rows("113:211").Select
    Selection.EntireRow.SpecialCells(xlBlanks).EntireRow.Delete
End If

'RP
If IsEmpty(Range("A9").Value) = True Then
    Rows("7:107").EntireRow.Delete XlDeleteShiftDirection.xlShiftUp
Else
    Rows("9:107").Select
    Selection.EntireRow.SpecialCells(xlBlanks).EntireRow.Delete
End If

End Sub

VBA-Fenster

Antwort1

Sie können es nicht Rows()mit einer Spaltenreferenz verwenden. Ändern Sie einfach Ihren ersten Teil so, dass nur die Zeilen angezeigt werden.

If IsEmpty(Range("A827").Value) = True Then
    Rows("825:925").EntireRow.Delete XlDeleteShiftDirection.xlShiftUp
Else
    Rows("827:925").EntireRow.SpecialCells(xlBlanks).EntireRow.Delete
End If

Oder du hättest es tun könnenRange("A825:A925").EntireRow.Delete ...

Antwort2

Das Bereichsargument „Ziel“ wird nicht verwendet und Sie verwenden die Zeilenmethode nicht richtig. Wenn es sich um einen statischen Bereich handelt, schlage ich vor, etwas wie Folgendes zu verwenden:

Private Sub RemoveRows()

  If IsEmpty(ActiveSheet.Range("A827").Value) = True Then ActiveSheet.Range("A827:A925").Clear

End Sub

Wenn Sie ein Bereichsargument übergeben möchten, empfehle ich die Übergabe eines Zeichenfolgenwerts des Bereichs anstelle eines vollständigen Bereichsobjekts:

Private Sub RemoveRows(ByVal TargetRange As String)

If IsEmpty(ActiveSheet.Range("A827").Value) = True Then ActiveSheet.Range(TargetRange).Clear

End Sub

Um dies zu verwenden, übergeben Sie einfach die Zeichenfolgendarstellung des Bereichs als Argument:

Private Sub CallRemoveRows()

RemoveRows ("A827:A895")

End Sub

verwandte Informationen