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
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