Poder repetir una macro en algunas hojas de mi excel

Estimados quisiera saber como puedo ejecutar una macro en algunas de mis hojas excel, ya probé con esta función

Worksheets("Detalle Cristian Caporelli"). Activate

Pero no me funciono, (debido a que es una macro que oculta columnas)

3 respuestas

Respuesta
1

Sin ver tu código es complicado darte una respuesta exacta. Si tu macro tiene referencias a hojas, solo se ejecutará correctamente en esas hojas, ojo con eso (y no me refiero al uso de "Activate" o "Select")

Abraham Valencia

Te adjunto la macro

Sub Ocultar_Columnasbbpp()
Range("B:AG").EntireColumn.Hidden = False
Dim xRg As Range
    Application.ScreenUpdating = False
    Cells.EntireColumn.Hidden = False
  C = Cells(10, 1).End(xlToRight).Column
    letra = Evaluate("=SUBSTITUTE(ADDRESS(1," & C - 4 & ",4),""1"","""")")
    If C > 5 Then
        Columns("B:" & letra).EntireColumn.Hidden = True
    End If
    Stop
        For Each xRg In Range("A10:AF10")
            If xRg.Value = "" Then
   xRg.EntireColumn.Hidden = True
            End If
        Next xRg
        Cells(10, C).Offset(0, 1).EntireColumn.Hidden = False
    Application.ScreenUpdating = True
End Sub

Pues esa macro funcionará en cualquier hoja que esté activa o seleccionada, claro, siempre y cuando la disposición de los datos sea estrictamente igual en cada hoja en donde la uses, de no ser así pues no tiene sentido usar esa misma macro en otras hojas.

Abraham Valencia

Claro, pero por ejemplo quiero que al ejecutar la macro se ejecute en algunas de las hojas que tiene el excel y quisiera saber como se puede hacer eso de la mejor manera posible

Nuevamente ya que no se si no me dejé entender o qué: La macro funcionará solo en hojas con una estructura 100% igual, para otros casos no será útil. ¿Cómo ejecutarla en esas otras hojas iguales? Basta que tengas la hoja activa y corras la macro, nada más, o que pongas una primera línea en esa macro tal cual ya lo habías hecho:

Worksheets("Detalle Cristian Caporelli"). Activate

Abraham Valencia

Respuesta
1

Modifica tu macro con las líneas resaltadas en la imagen, la primera instrucción te da el valor indice de la hoja que este activa, la variable aplicara en este caso tienen 5 opciones que dependerán del valor del la variable indice, los 1 representan sobre que hojas se aplicara la macro en este caso las hojas 2,3 y 5, una vez que el valor es seleccionado el IF aplicara la macro o descartara su uso, para saber los valores indices, lo único que tienes que hacer es llenar la opción choose diciendo sobre que páginas se aplicara y sobre cuales no

Estimado una duda la variable siguiente como la defino que me aparece una aviso cuando la ejecuto.

Y la siguiente consulta ya que no he podido correr la macro, como el excel tiene aproximadamente 20 páginas y quisiera saber como lo ordena el excel si de esta forma (1,11

,12,13) o (1,2,3,4)

Disculpa mi ignorancia es que así aparece en la visualización del vba (adjunto imagen), quedo atento a tus comentarios.

Saludos.

Primera duda siguiente no es una variable es un salto de línea de código, te paso tu macro para que veas como se establece este salto, la macro que dice numerar te mostrara un listado con el nombre de las hojas y que indice le corresponde, en la instrucción choose solo tienes que agregar las 20 opciones y cuales serán 1, y cuales 0, la otra alternativa y más fácil pon en una celda de cada hoja por ejemplo en la celda A1, 0 para no correr la macro y 1 para correrla, y solo escribes en el IF range("a1")=0 then goto siguiente

Sub Ocultar_Columnasbbpp()
Range("B:AG").EntireColumn.Hidden = False
Dim xRg As Range
    Application.ScreenUpdating = False
    Cells.EntireColumn.Hidden = False
    indice = ActiveSheet.Name
    aplicara = Worksheets("indice", 1, 0, 0, 0, 1, 1)
    If aplicara <> 1 Then GoTo siguiente
    'if range("a1")=0 then goto siguiente
  C = Cells(10, 1).End(xlToRight).Column
    letra = Evaluate("=SUBSTITUTE(ADDRESS(1," & C - 4 & ",4),""1"","""")")
    If C > 5 Then
        Columns("B:" & letra).EntireColumn.Hidden = True
    End If
    Stop
        For Each xRg In Range("A10:AF10")
            If xRg.Value = "" Then
   xRg.EntireColumn.Hidden = True
            End If
        Next xRg
        Cells(10, C).Offset(0, 1).EntireColumn.Hidden = False
siguiente:
    Application.ScreenUpdating = True
End Sub
'
'
Sub numerar()
On Error Resume Next
Sheets("indice").Select
    If Err.Number > 0 Then
    Sheets.Add
    ActiveSheet.Name = "indice"
    End If
On Error GoTo 0
i = 1
For Each hoja In Worksheets
    Range("a1").Cells(i, 1) = hoja.Name
    Range("b1").Cells(i, 1) = hoja.Index
    i = i + 1
Next hoja
End Sub
Respuesta
1

Te adjunto otra propuesta a ver si interpreté lo que necesitas.

'... Como puedo ejecutar una macro en algunas de mis hojas excel...' Esto me da a pensar que necesitas que se ejecute en varias hojas en una sola corrida.

Para eso, declaré en una matriz el nombre de las hojas (eso me evita tener que recordar cuál es su nro de índice). Y luego un bucle recorre esa matriz y ejecuta las mismas instrucciones en las hojas seleccionadas.

Sub Ocultar_Columnasbbpp()
'ajustada x Elsamatilde
Dim xRg As Range
Dim hojitas()
Dim i As Byte
hojitas = Array("Hoja1", "Resumen", "Hoja2")  'coloca aquí cuáles son las hojas
For i = LBound(hojitas) To UBound(hojitas)
    Sheets(hojitas(i)).Select
    'la macro
        Range("B:AG").EntireColumn.Hidden = False
        Application.ScreenUpdating = False
        Cells.EntireColumn.Hidden = False
        C = Cells(10, 1).End(xlToRight).Column
        letra = Evaluate("=SUBSTITUTE(ADDRESS(1," & C - 4 & ",4),""1"","""")")
        If C > 5 Then
            Columns("B:" & letra).EntireColumn.Hidden = True
        End If
        Stop
            For Each xRg In Range("A10:AF10")
                If xRg.Value = "" Then
       xRg.EntireColumn.Hidden = True
                End If
            Next xRg
            Cells(10, C).Offset(0, 1).EntireColumn.Hidden = False
        Application.ScreenUpdating = True
Next i
End Sub

Si esta respuesta resuelve tu consulta no olvides valorarla (opciones: Excelente o buena).

PD) Nuevo manual de Bucles. Cyber-mes en manuales Excel.

Estimada, no se porque pero me funciona en algunas hojas no en todas las que debería :(

Por los nombres de hojas que utilizas según observo en tu imagen, solo puedo pensar en que no los escribiste correctamente en la matriz.

Es tu macro a la que solo le agregué la matriz con los nombres... bien simple y no necesitas ordenar las hojas ni nada.

Si aún así no se ejecuta en todas las hojas que necesitas dejá imagen del Editor con la lista de objetos y de la instrucción del Array para revisarla.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas