Ejecutar una misma macro desde diferentes hojas

En un mismo libro tengo una hoja que se llama ABM, y luego 12 hojas más con el nombre de cada mes (Ene, Feb, Mar, etc.). Lo que necesito es que al seleccionar cualquiera de las hojas relacionadas a los 12 meses se active en la hoja seleccionada la siguiente macro:

Private Sub Mensual()
With [C9].Resize([A9:A200].Count)
  .Formula = "=IFERROR(VLOOKUP($A9,ABM!$D$4:$X$971,4,FALSE),"""")"
  .Value2 = .Value2
  .Replace What:=False, Replacement:=""
End With
End Sub

¿Dónde debería escribir esta macro? ¿Cómo hago para llamar desde cada hoja seleccionada a esta macro? Lo que ya intenté es escribir esta macro en un módulo, y luego en cada hoja poner lo siguiente... Pero no funcionó

Private Sub Worksheet_Activate()
Call Mensual
End Sub

2

2 respuestas

Respuesta
1

Creo que deberías ponerlo en el objeto ThisWorkbook, una posible opción sería:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name <> "ABM" Then
   'Asumo que el libro solo tiene la hoja ABM y las de los meses, por lo tanto
   'si la hoja en cuestión no es ABM es porque se trata de uno de los meses
   With [C9].Resize([A9:A200].Count)
   .Formula = "=IFERROR(VLOOKUP($A9,ABM!$D$4:$X$971,4,FALSE),"""")"
   .Value2 = .Value2
   .Replace What:=False, Replacement:=""
   End With
End If
End Sub
'Este es tu código (que ya no haría falta)
Private Sub Mensual()
With [C9].Resize([A9:A200].Count)
  .Formula = "=IFERROR(VLOOKUP($A9,ABM!$D$4:$X$971,4,FALSE),"""")"
  .Value2 = .Value2
  .Replace What:=False, Replacement:=""
End With
End Sub

Salu2

Respuesta

No comentaré sobre tu macro "Mensual" pero si te puedo decir que par que sirva en todas las hojas debes colocarla en un módulo "standard" (que parece sí lo hiciste) pero sin la palabra "Private":

Sub Mensual()

Prueba y comentas

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas