Optimización de códigos en VBA

Para Dante Amor. Buenas tardes antes que nada volver a agradecerte por el aporte en mi duda anterior. Ahora tengo una sentencia establecida en VBA, es decir partiendo de que tengo 50 hojas fijas realice una macro que copiara ciertos rangos de cada hoja y los pegara de manera consecutiva en otra hoja. Tengo dos dudas:

1.- Poder Optimizar mi sentencia ya que considero que es muy burda y robusta, te pego el código solo para la hoja llamada 01 y la llamada 02, este patrón se repite para todas las demás hojas hasta la 50.

' Copia los valores de jerarquización de cada nodo generado para visualizar en matriz
'INFORMACIÓN PARA EL NODO 01
    Sheets("01").Select
    Range("AB9:AJ58").Select
    Selection.Copy
    Sheets("Matrices").Select
    Range("AR1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
'INFORMACIÓN PARA EL NODO 02
    Sheets("02").Select
    Range("AB9:AJ58").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Matrices").Select
    Range("AR51").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

2.- Me apoyaste a elaborar una macro (Crear hojas con formato con VBA) que dado los valores de columna en una hoja se creen las hojas con dichos nombres, mi código ya tiene establecido que es para 50 hojas (nombre de la 01 a la 50), quiero saber si se puede que dicha sentencia pueda detenerse hasta las hojas que estén creadas.

1 Respuesta

Respuesta
2

Te anexo la macro para el punto 1, para optimizar el código, recorre las hojas desde la 01 hasta la 50, pero, por ejemplo, si solamente tienes 5 hojas 01,02,03,04 y 05, entonces solamente copia de la 01 a la 05.

Sub Copiar_Rango_De_Hojas()
'Act.Por.Dante Amor
    Application.ScreenUpdating = False
    Set h1 = Sheets("Matrices")
    n = 1
    For i = 1 To 50
        hoja = Format(i, "00")
        For Each h In Sheets
            If h.Name = hoja Then
                Sheets(hoja).Range("AB9:AJ58").Copy
                h1.Range("AR" & n).PasteSpecial Paste:=xlPasteValues, _
                    Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                n = n + 50
                Exit For
            End If
        Next
    Next
    Application.ScreenUpdating = True
    Application.CutCopyMode = False
    MsgBox "Copias terminadas"
End Sub

Para el punto 2, con mucho gusto te ayudo con todas tus peticiones.

Valora esta respuesta y crea una nueva pregunta en el tema de microsoft Excel. En el desarrollo de la pregunta escribe: "para Dante Amor". Ahí me describes con detalle lo que necesitas.

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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas