Ejecutar macro en todo el libro, excluyendo 3 hojas.

Mi nombre es José y quisiera pedir de su ayuda, tengo una macro que quisiera que se ejecutara en todo el libro, menos en tres hojas especificas que son "Generador" "Auxiliar" y "Boleta" después de investigar tanto en este foro como en otros, logre "formular" la siguiente macro, sin embargo no me excluye las hojas, me marca error, si corro la macro sin excluir funciona perfectamente, por lo tanto pondré la macro que quiero ejecutar en todo el libro, a ésta misma quisiera añadirle las "exclusiones" de las hojas mencionadas, adjunto el código.

Sub prueba()
 Dim i As Byte
 Dim Celda As Range
 Dim Paso As Integer
For i = 1 To ThisWorkbook.Sheets.Count
   ThisWorkbook.Sheets(i).Select
Paso = 12
    For Each Celda In Sheets("Generador").Range("A6:A100")
        If Celda = "" Then Exit For
        If UCase(Celda.Offset(1, 0)) = UCase(Range("n1")) Then
            Cells(Paso, 2) = Celda.Offset(1, 1)
            Cells(Paso, 3) = Celda.Offset(1, 2)
            Cells(Paso, 4) = Celda.Offset(1, 3)
            Cells(Paso, 5) = Celda.Offset(1, 4)
             Cells(Paso, 6) = Celda.Offset(1, 5)
              Cells(Paso, 7) = Celda.Offset(1, 6)
               Cells(Paso, 8) = Celda.Offset(1, 7)
                Cells(Paso, 9) = Celda.Offset(1, 8)
                 Cells(Paso, 10) = Celda.Offset(1, 9)
                  Cells(Paso, 11) = Celda.Offset(1, 10)
            Paso = Paso + 1
  End If
       Next Celda
Next
End Sub

La macro lo que hace es copiar los valores de la hoja "Generador" que coincidan con la celda "N1" de cada hoja en donde se pegaran, sin embargo, no quiero que en "Generador" me copie nada, sólo que obtenga la información pero que no reemplace valores, quiero lo mismo para las hojas "boleta" y "auxiliar", probé con lo siguiente -- If hoja.Name <> "Generador" and hoja.name <> "Auxiliar" and hoja.name <> "Boleta" Then -- Colocarlo después de la linea de "For Each", pero no funciono, ¿alguna sugerencia?

2 Respuestas

Respuesta
1

Te anexo la macro actualizada

Sub prueba()
    Dim i As Byte
    Dim Celda As Range
    Dim Paso As Integer
    For i = 1 To ThisWorkbook.Sheets.Count
        Select Case Sheets(i).Name
            Case "Generador", "Auxiliar", "Boleta"
                'En esta línea se ponen las hojas que se excluyen
            Case Else
                'La macro trabaja con las demás hojas
                ThisWorkbook.Sheets(i).Select
                Paso = 12
                For Each Celda In Sheets("Generador").Range("A6:A100")
                    If Celda = "" Then Exit For
                    If UCase(Celda.Offset(1, 0)) = UCase(Range("n1")) Then
                        Cells(Paso, 2) = Celda.Offset(1, 1)
                        Cells(Paso, 3) = Celda.Offset(1, 2)
                        Cells(Paso, 4) = Celda.Offset(1, 3)
                        Cells(Paso, 5) = Celda.Offset(1, 4)
                        Cells(Paso, 6) = Celda.Offset(1, 5)
                        Cells(Paso, 7) = Celda.Offset(1, 6)
                        Cells(Paso, 8) = Celda.Offset(1, 7)
                        Cells(Paso, 9) = Celda.Offset(1, 8)
                        Cells(Paso, 10) = Celda.Offset(1, 9)
                        Cells(Paso, 11) = Celda.Offset(1, 10)
                        Paso = Paso + 1
                    End If
                Next Celda
        End Select
    Next
End Sub

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

¡Gracias! Funciona correctamente la macro, no conocía esa función para excluir hojas, la seguiré empleando en futuras macros, Gracias!

Respuesta
1

Prueba esta:

Sub prueba()
Dim i As Byte
Dim Celda As Range
Dim Paso As Integer
For i = 1 To ThisWorkbook.Sheets.Count
ThisWorkbook.Sheets(i).Select
If ActiveSheet.Name = "Generador" Or ActiveSheet.Name = "Auxiliar" Or ActiveSheet.Name = "Boleta" Then GoTo siguiente
Paso = 12
For Each Celda In Sheets("Generador").Range("A6:A100")
If Celda = "" Then Exit For
If UCase(Celda.Offset(1, 0)) = UCase(Range("n1")) Then
Cells(Paso, 2) = Celda.Offset(1, 1)
Cells(Paso, 3) = Celda.Offset(1, 2)
Cells(Paso, 4) = Celda.Offset(1, 3)
Cells(Paso, 5) = Celda.Offset(1, 4)
Cells(Paso, 6) = Celda.Offset(1, 5)
Cells(Paso, 7) = Celda.Offset(1, 6)
Cells(Paso, 8) = Celda.Offset(1, 7)
Cells(Paso, 9) = Celda.Offset(1, 8)
Cells(Paso, 10) = Celda.Offset(1, 9)
Cells(Paso, 11) = Celda.Offset(1, 10)
Paso = Paso + 1
End If
Next Celda
siguiente:

Next

End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas