Problema VBA

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

Respuesta
1
Pues como no. Lo que sucede es que ClearContents implica también un evento Change y... el procedimiento se llama a sí mismo un número de veces tal que satura la memoria.
Hay que pensar en una estrategia para deshabilitar el evento... que de hecho la hay pero... te la paso temprano.
Aquí está, con la recursividad controlada.
.
Private Sub Worksheet_Change(ByVal Target As Range)
Static BANDERA As Boolean
   MsgBox BANDERA
   If BANDERA = False Then
      BANDERA = True
      If Target.Column = 1 Then
         antes = "A2:" & "A" & Target.Row - 1
         despues = "A" & Target.Row + 1 & ":A1000"
         Worksheets("Convenios").Range(antes).ClearContents
         Worksheets("Convenios").Range(despues).ClearContents
      Else
         Exit Sub
      End If
   Else
      BANDERA = True
   End If
End Sub
.
... pero... quítale el MsgBox, que utilicé para la depuración.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas