Saltar al contenido

Ejecutar macro dependiendo del nombre de la Hoja

publicado

Buen día a todos;

Estoy trabajando en un proyecto donde es necesario actualizar algunos datos sobre ciertas hojas de excel (cerca de 30 hojas), el libro en total contendrá unas 75 hojas.

Existe cierta constante sobre el nombre de las hojas donde se debe de actualizar la información, por ejemplo: las hojas donde deseo ejecutar la macro comienzan con MEX0 y despues se les asignan otro tipo de digitos como MEX0A0023, MEX0A0023-1, MEX0A0023-1A, etc, entonces la constante en el nombre es MEX0

Estaba pensando en utilizar alguna función como:

Dim Hoja As String

For Each Hoja In Worksheets

Aquí es donde me pierdo, quisiera agregar un Like o algo como contiene,

Aqui iría la Macro

Next

Me pueden echar una mano para liberarme de muchas horas de trabajo repetitivo por favor jejeje!! :mushroom:

Mcuhas gracias de antemano.

Saludos.

Featured Replies

publicado


For Each Hoja In Worksheets
[B]
If Left(Hoja.Name, 4) = "MEX0" Then[/B]
[COLOR=#008000] 'Aquí la macro[/COLOR]
[B] End If[/B]

Next


[/CODE]

publicado
  • Autor

Hola Marco Antonio,

Muchas gracias por tu pronta respuesta, estoy colocando tal cual me lo indicaste, pero la macro solo trabaja sobre la primer hoja, no se sigue ejecutando en las demas, este el codigo que tengo:

For Each Hoja In Worksheets

If Left(Hoja.Name, 4) = "MEX0" Then

Range("J168").Select

Selection.Copy

Range("H168").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

End If

Next

Que podrá estar mal?

Saludos.

publicado

Buenos dias Ivan.

Lo que falta es hacer el cambio de hoja, esto lo puedes hacer despues del IF agregando la siguiente linea:

Hoja.Select [/CODE]

Saludos......

publicado

Hola:

Como veo que vas un poco despistado, prueba con:



Private Sub Workbook_Open()
Dim Hoja As Worksheet


For Each Hoja In Worksheets
If Left(Hoja.Name, 4) = "[COLOR=#0000cd]MEX0[/COLOR]" Then
Hoja.Range("[COLOR=#0000cd]H168[/COLOR]").Value = Hoja.Range("[COLOR=#0000cd]J168[/COLOR]").Value
End If
Next

End Sub


[/CODE]

publicado
  • Autor

Ujuuuuuu!!

Muchisimas gracias, de verdad que con esto me ahorran mas de 20min por cada actualización que se hace sobre el file.

El código quedo de la siguiente manera ya funcionando:

For Each Sheet In ActiveWorkbook.Sheets

If Left(Sheet.Name, 9) = "MEX0" Then

Sheet.Select

Aqui es donde va la macro

Enf If

Next

Espero que si alguien tiene algún caso similar les funcione.

Muchas gracias por el apoyo, seguimos en contacto.

Saludos.

publicado

Sin ver tu libro no puedo aseguraralo pero parece que eso puedes hacerlo agrupando las hojas y te evitarias el bucles, seria mas rapido.

Sub Agrupar()
Sheets.Select
End Sub[/CODE]

publicado
  • Autor

Hola Armando,

Si de hecho es un poco lento la macro que ejecuto, me puedes explicar un poco mas el Sub Agrupar que comentar por favor.

Gracias de antemano.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.