Macro que se ejecute en todas las hojas del libro activo

Hola, muy buenos días:

Pues bien, tengo una macro, la cual se ejecuta en la hoja activa, pero necesito que se ejecute para todas las hojas del libro! Help me! Anexo la macro con la que estoy trabajando:

Sub selecciona()
Application.ScreenUpdating = False
On Error Resume Next
Dim strnombrehoja$
strnombrehoja$ = ActiveSheet.Name
Dim uf, fila As Integer
Dim esp, cadena As Date
uf = Sheets(strnombrehoja$).Range("A" & Rows.Count).End(xlUp).Row
fila = 6
While Sheets(strnombrehoja$).Cells(fila, 1) <> Empty
esp = InStr(cadena, " ")
dato = Mid(cadena, esp)
dato = Val(dato)
If dato > 0 Then
Sheets(strnombrehoja$).Range("A" & fila & ":O" & fila).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
fila = fila + 1
dato = Empty
Wend
Application.ScreenUpdating = True
End Sub

Gracias.

1 respuesta

Respuesta
1

Tal como la veo redactada, la tenés que colocar en un módulo y podes ejecutarla desde cualquier hoja. Solo necesitas colocar en cada hoja un botón de llamada. O mejor asignándole un atajo de teclado lo que evitará el uso de botones.

PD) Estos temas los tengo explicados en la sección Macros de mi sitio.

Si en cambio necesitas, que recorra todas las hojas y realice el proceso en todas al mismo tiempo, hay que hacerle unos cambios.

Quedo a la espera de que me confirmes cuál es la idea antes de ponerme a cambiar el código.

Saludos!! Muchas gracias por la rápida respuesta! Y en cuanto a la idea:

1. Si, efectivamente la tengo en un módulo y se ejecuta en cualquier hoja.

2. Exactamente es lo que necesito, que recorra todas las hojas realizando su proceso al mismo tiempo en todas :)

Desde ya, muchas gracias!

Aquí va:

Sub selecciona()
'ajustada x Elsamatilde
'recorre todas las hojas para ejecutar esta rutina
For Each sh In ActiveWorkbook.Sheets
'selecciono la hoja
sh.Select
'puedo omitir alguna hoja, x ej: Hoja1
If sh.Name <> "Hoja1" Then
Application.ScreenUpdating = False
On Error Resume Next
Dim strnombrehoja$
strnombrehoja$ = ActiveSheet.Name
Dim uf, fila As Integer
Dim esp, cadena As Date
uf = Sheets(strnombrehoja$).Range("A" & Rows.Count).End(xlUp).Row
fila = 6
While Sheets(strnombrehoja$).Cells(fila, 1) <> Empty
esp = InStr(cadena, " ")
dato = Mid(cadena, esp)
dato = Val(dato)
If dato > 0 Then
Sheets(strnombrehoja$).Range("A" & fila & ":O" & fila).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
fila = fila + 1
dato = Empty
Wend
End If
'pasa a la hoja siguiente
Next sh
Application.ScreenUpdating = True
End Sub

Lo nuevo es lo que aparece en negrita. Dejo la opción de que omita alguna hoja.

Si no es tu caso y realmente debe ejecutarse en todas debes QUITAR las líneas :

If sh.name .......... y el último End If.

Me funciona de maravilla! Muchas gracias por ayudar a una novata en la programación de macros :) mis saludos, respetos y admiración para usted!. Que tenga un muy buen día!.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas