Código VBA para eliminar celdas en blanco

Código VBA para eliminar celdas en blanco

¿Alguna idea de por qué esto no funcionará? Sigo recibiendo el error 1004 en tiempo de ejecución: error definido por la aplicación o definido por el objeto. Estoy intentando eliminar una sección completa de filas si la primera celda está vacía y luego, si no está vacía, eliminar todas las filas vacías hasta que haya una fila que contenga valores. Es solo para limpiar fácilmente una hoja de cálculo. Adjunto el código.ingrese la descripción de la imagen aquí

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

Ventana VBA

Respuesta1

No se puede utilizar Rows()con una referencia de columna. Simplemente cambie su primera parte solo a las filas.

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

O podrías haberlo hechoRange("A825:A925").EntireRow.Delete ...

Respuesta2

El argumento de rango "Destino" no se utiliza y no está utilizando el método de filas correctamente. Si se trata de un rango estático, sugiero usar algo como:

Private Sub RemoveRows()

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

End Sub

Si tiene la intención de pasar un argumento de rango, le sugiero pasar un valor de cadena del rango en lugar de un objeto de rango completo:

Private Sub RemoveRows(ByVal TargetRange As String)

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

End Sub

Luego, para usar esto, simplemente pase la representación de cadena del rango como argumento:

Private Sub CallRemoveRows()

RemoveRows ("A827:A895")

End Sub

información relacionada