Repetir Macro dentro de una Macro

Dante Amor, necesito otra vez su ayuda.

Tengo esta macro:

Sub ValoresComunes()
    Range("M48:X63").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("M16:X16").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A1").Select
End Sub

Quiero repetirla como antes y probe de dos maneras:

Sub TodosValoresComunes1()
    For Each h In Sheets
        Select Case h.Name
            Case "Fechas", "General", "Reimpresion", "Aguinaldo", "Resumen", "Base de Datos", "Adelantos"
            Case Else
                h.Application.Run "Sueldos.xlsm!ValoresComunes.ValoresComunes"
        End Select
    Next
End Sub
Sub TodosValoresComunes2()
    For Each h In Sheets
        Select Case h.Name
            Case "Fechas", "General", "Reimpresion", "Aguinaldo", "Resumen", "Base de Datos", "Adelantos"
            Case Else
                h.Range("M48:X63").Select
                Application.CutCopyMode = False
                Selection.Copy
                h.Range("M16:X16").Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False
                h.Range("A1").Select
        End Select
    Next
End Sub

1 respuesta

Respuesta
2

Pero qué quieres hacer. Ejecutar una macro o copiar una celdas

Si quieres copiar una celdas, dime qué celdas quieres copiar y en dónde las quieres pegar; la quieres pegar en la misma hoja.

Supongo que lo quieres hacer para todas las hojas, excepto las nombradas.

Yo tengo una macro ya hecha, que la ejecuto de forma manual en cada Hoja, pero a veces tengo que volver a poner los valores comunes en todas las hojas, por eso no se como hacer que se ejecute esa macro en cada hoja o tengo que poner nuevamente la macro.

Sub ValoresComunes()
    Range("M48:X63").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("M16:X16").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A1").Select
End Sub

Esas celdas de cada hoja copiarlas en la misma hoja mas arriba.

O sea, que agarre la hoja1 copie y pegue en la hoja1, que agarre la hoja2 copie y pegue en la hoja2, cada hoja tiene sus parametros de uso diario.

Te anexo la macro actualizada

Sub ValoresComunes()
'Act.Por.Dante Amor
    Application.ScreenUpdating = False
    For Each h In Sheets
        Select Case h.Name
            Case "Fechas", "General", "Reimpresion", "Aguinaldo", _
                 "Resumen", "Base de Datos", "Adelantos"
            Case Else
                h.Range("M48:X63").Copy
                h.Range("M16").PasteSpecial Paste:=xlPasteValues
        End Select
    Next
End Sub

Te explico un poco el funcionamiento:

Establezco en el objeto h cada una de las hojas que existe en todas las hojas del libro

For Each h In Sheets

Entonces empieza el ciclo con la primera hoja de tu libro, establecida en el objeto h.

Establecer un objeto en una variable de objeto, significa que todas las propiedades y métodos del objeto original los puedes utilizar con la variable de objeto.

Cuando tu haces esto:

    For Each h In Sheets
        Select Case h.Name
            Case "Fechas", "General", "Reimpresion", "Aguinaldo", "Resumen", "Base de Datos", "Adelantos"
            Case Else
                h.Range("M48:X63").Select
        End Select
    Next

La macro te envía el error "Error en el método select de la clase Range", esto es debido, a que si te encuentras en la hoja 2 y quieres seleccionar un rango de la hoja1, no puedes, porque primero tendrías que seleccionar la hoja1, después un rango de la hoja1 y después copiar:

    For Each h In Sheets
        Select Case h.Name
            Case "Fechas", "General", "Reimpresion", "Aguinaldo", "Resumen", "Base de Datos", "Adelantos"
            Case Else
                h.Select
                h.Range("M48:X63").Select
                Selection.Copy
        End Select
    Next

Pero todo lo puedes realizar con una sola instrucción:

    For Each h In Sheets
        Select Case h.Name
            Case "Fechas", "General", "Reimpresion", "Aguinaldo", "Resumen", "Base de Datos", "Adelantos"
            Case Else
                h.Range("M48:X63").Copy
        End Select
    Next

Como ya te comenté, con la variable objeto h, puedo utilizar los métodos de la hoja, en este caso puedo utilizar el método Copy

Lo mismo para pegar:

    For Each h In Sheets
        Select Case h.Name
            Case "Fechas", "General", "Reimpresion", "Aguinaldo", _
                 "Resumen", "Base de Datos", "Adelantos"
            Case Else
                h.Range("M48:X63").Copy
                h.Range("M16").PasteSpecial Paste:=xlPasteValues
        End Select
    Next

.

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

.

Avísame cualquier duda

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas