Macro "ClearContents" para varias hojas de cálculo

He creado una macro para borrar los datos de una celda cada vez que pulso el botón al que está asignado dicha macro, con la siguiente rutina:
Sub Borrar_datos()
Ans = MsgBox("Seguro que quiere borrar los datos del turno anterior? ", vbYesNo, "Aviso")
If Ans = vbYes Then
Range("G24:G30").ClearContents
End If
End Sub
Como el libro en el que estoy trabajando se basa en varias hojas iguales, cada una de las cuales tiene la misma celda, quiero una macro que se ejecute en todas a la vez. Por lo que me gustaría que cada vez que apretó a este botón y se ejecuta la macro, también me borrase los datos de la misma celda pero en otras 11 hojas más.

1 respuesta

Respuesta
2
Podemos agregar un bucle que recorra las 11 hojas realizando la misma acción, el tema es si tenés + hojas, de alguna manera habrá que indicar en la rutina de qué hojas se tratará.
En mi ejemplo coloqué 1 hoja que debe ser excluida, como para que tengas 1 ejemplo:
Sub Borrar_datos()
Ans = MsgBox("Seguro que quiere borrar los datos del turno anterior? ", vbYesNo, "Aviso")
If Ans = vbYes Then
    For each sh in Sheets
    if sh.name <> "Menu" then Range("G24:G30").ClearContents
    next sh
End If
End Sub
Sdos. No dejes la consulta sin finalizar si el tema queda resuelto.
Hola Elsa, gracias por la respuesta tan rápida, lo único que no la entendí del todo lo que quieres decir por sh, de ahí que me decidí a hacerlo a lo bruto, de esta forma:
Sub Borrar_datos()
Ans = MsgBox("Seguro que quiere borrar los datos del turno anterior? ", vbYesNo, "Aviso")
If Ans = vbYes Then
Range("G24:G30").ClearContents
Worksheets("Hora 2").Range("G24:G30").ClearContents
Worksheets("Hora 3").Range("G24:G30").ClearContents
Worksheets("Hora 4").Range("G24:G30").ClearContents
Worksheets("Hora 5").Range("G24:G30").ClearContents
Worksheets("Hora 6").Range("G24:G30").ClearContents
Worksheets("Hora 7").Range("G24:G30").ClearContents
Worksheets("Hora 8").Range("G24:G30").ClearContents
Worksheets("Hora 9").Range("G24:G30").ClearContents
Worksheets("Hora 10").Range("G24:G30").ClearContents
Worksheets("Hora 11").Range("G24:G30").ClearContents
Worksheets("Hora 12").Range("G24:G30").ClearContents
End If
End Sub
No se si habría otra forma más rápida, pero de todas maneras muchas gracias por la respuesta
Considerando que todas las hojas se llaman Hora..., podemos utilizar esto en el bucle:
Sub Borrar_datos()
Ans = MsgBox("Seguro que quiere borrar los datos del turno anterior? ", vbYesNo, "Aviso")
If Ans = vbYes Then
'por cada hoja (sh) en el conjunto de hojas (Sheets)
    For each sh in Sheets
'si el nombre de la hoja comienza con "Hora" entonces limpia el rango de esa hoja
    if Left(sh.name,4) = "Hora" then sh.Range("G24:G30").ClearContents
'pasa a la hoja siguiente
    next sh
End If
End Sub
Si hay alguna hoja Hora que no debe ser contemplada, entonces la esquivas con la instrucción dejada en mi primer respuesta.
Espero te haya quedado claro. En mi sitio encontrarás más ejemplos de macros.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas