Error 1004 en un Range

Tengo esto:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
    antes = "A2:" & "A" & Target.Row - 1
    despues = "A" & Target.Row + 1 & ":A1000"
    Worksheets("Convenios").Range(antes).Select
    Worksheets("Convenios").Range(despues).Select
Else
    Exit Sub
End If
End Sub
Lo que quiero es que cuando modifique cualquier celda de la columna A, automáticamente se borren todas las anteriores y todas las posteriores hasta A1000.
La macro parece funcionar haciendo el select, pero si cambio este select por ClearContents, que es lo que realmente quiero hacer, me da error 1004.
1

1 Respuesta

2.081.265 pts. En mi sitio encontraran material de ayuda, ejemplos...
¿Qué haces del otro lado del mostrador?
Te comento que el Change se ejecuta ante cualquier cambio en col A, por lo tanto cuando limpias el contenido también se ejecuta nuevamente... para evitar eso tenés que inhabilitar momentáneamente el evento Change.
También te separé en 2 grupos porque la 2da selección reemplazaba a la 1ra
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
    antes = "A2:" & "A" & Target.Row - 1
    despues = "A" & Target.Row + 1 & ":A1000"
    Worksheets("Convenios").Range(antes).Select
    Application.EnableEvents = False
    Selection.ClearContents
    Application.EnableEvents = True

    Worksheets("Convenios").Range(despues).Select
    Application.EnableEvents = False
    Selection.ClearContents
    Application.EnableEvents = True
    Target.Select    'opcional
Else
    Exit Sub
End If
End Sub
Fantático. No había pensado yo que era recursivo. Por eso incluso se me bloqueaba todo el Excel.
Por cierto, realmente no quiero borrar hasta el A1000 sino hasta el A que sea el último de la base de datos (también llamada "tabla") que tengo en este hoja. ¿Hay alguna forma de referenciar al último registro?
Muchas gracias.
Podes utilizar alguna de estas 2:
- De arriba hacia abajo: debe haber por lo menos algún dato en A y se para en la primer fila vacía.
ulti = range("A1").end(xldown).Row
-de abajo hacia arriba (la + apropiada)
ulti = range("A65536").end(xlup).row
Sdos
Elsa
Y la instrucción que establece el rango 'despues' te quedaría así:
despues = "A" & Target.Row + 1 & ":A" & ulti

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas