¿Como hacer que la macro se ejecuta cuantas veces sea necesario?

Mi caso es que tengo una macro la cual funciona bien lo que no logro es hacer que todos lo que encuentre según lo obuscado lo elimine, la macro busca selecciona y elimina pero solo lo hace una vez para que me elimine todos debo hacer clic de nuevo en commandbutton hastsa eliminar todo lo que exista.

Aqui dejo el codigo:

Dim Dato As String

Dim busca As Range

Dim dire As String

Dim cont As Integer

Sheets("ASIENTOS").Select

Dato = Label37

cont = 0

Set busca = Sheets("ASIENTOS").Range("C2:C65536").Find(Dato, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext)

If Not busca Is Nothing Then

dire = busca.Address

Range(dire).Activate 'Necesario para ubicar desde donde se selecciona

'Seleccionar el asiento completo.

Range(ActiveCell.Offset(0, 0).End(xlDown), ActiveCell.Offset(0, 26)).Select

Do

'Cuenta los resultados encontrados.

cont = cont + 1

Set busca = Sheets("ASIENTOS").Range("C2:C65536").FindNext(busca)

Loop While Not busca Is Nothing And busca.Address <> dire

End If

MsgBox "Se eliminaron " & cont & " asientos reversados para modificar."

'Borra toda la seleccion.

Selection.Delete

1 respuesta

Respuesta
1

H o l a:

Prueba con la siguiente macro. Técnicamente hace lo mismo que tu macro, es decir selecciona las celdas desde la celda que tiene el dato hacia abajo y hacia la derecha y elimina la información. Pero lo hace para toda la columna.

Private Sub CommandButton1_Click()
'Por.Dante Amor
    Set h = Sheets("ASIENTOS")
    For i = h.Range("C" & Rows.Count).End(xlUp).Row To 1 Step -1
        If UCase(h.Cells(i, "C")) = UCase(Label37) Then
            h.Range(h.Cells(i, "C").End(xlDown), h.Cells(i, "C").Offset(0, 26)).Delete
            cont = cont + 1
        End If
    Next
    MsgBox "Se eliminaron " & cont & " asientos reversados para modificar."
End Sub

Prueba y me comentas.


':)
':)

Perdona es que envie el codigo anterior este es el nuevo, lo que cambia es la seleccion pero lo que quiero que haga es que seleccione y elimine hasta que ya no existe ese registro y no que deba hacer clic o ejecutar ya que asi lo hace uno a uno y la idea es que los busque todos y los elimine...

Sheets("ASIENTOS").Select

Dato = Label37

cont = 0

Set busca = Sheets("ASIENTOS").Range("C2:C65536").Find(Dato, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext)
If Not busca Is Nothing Then
dire = busca.Address
Range(dire).Activate 'Necesario para ubicar desde donde se selecciona
 'Seleccionar el asiento completo.
 Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(0, 26)).Select
 Do

'Cuenta los resultados encontrados.
cont = cont + 1

Set busca = Sheets("ASIENTOS").Range("C2:C65536").FindNext(busca)
Loop While Not busca Is Nothing And busca.Address <> dire
End If

MsgBox "Se eliminaron " & cont & " asientos reversados para modificar."

'Borra toda la seleccion.
Selection.Delete

Entonces quedaría así:

Private Sub CommandButton1_Click()
'Por.Dante Amor
    Set h = Sheets("ASIENTOS")
    For i = h.Range("C" & Rows.Count).End(xlUp).Row To 1 Step -1
        If UCase(h.Cells(i, "C")) = UCase(Label37) Then
            h.Range(h.Cells(i, "C"), h.Cells(i, "C").Offset(0, 26)).Delete
            cont = cont + 1
        End If
    Next
    MsgBox "Se eliminaron " & cont & " asientos reversados para modificar."
End Sub


':)
':)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas