Macros de copiar y pegar (problemas)

Tengo una duda con una macro, cree una macro a base de grabación donde yo inicialmente abro un "archivo 1" de excel que tiene una macro configurada para ejecutar un "archivo 2" en una ubicación especifica, en este "archivo 2" el usuario debe completar una información especifica y se ejecuta una macro para copiar la la información completada al "archivo 1"
La macro funcione perfectamente, pero cuando le cambio el nombre al "archivo 1" este si ejecuta la macro de abrir el "archivo 2", pero este no ejecuta la macro de copiar la información porque el "archivo 1" tiene otro nombre, es posible modificar mi macro para que el "archivo 2" copie la información al archivo desde donde se abre sin importar el nombre que tenga

Adicional a esta macro quería saber si es posible, que la momento de copiar y pegar en otro libro, el copie si se haga en una celda especifica, pero el pegado se realice en una celda determinada que al lado contenga un valor ya definido
Les adjunto la macro del archivo 2 para que la puedan revisar:
Sub Macro1()
'
' Macro1 Macro
'
'
Windows("Archivo2.xlsm").Activate
Selection.Copy
Windows("Archivo1.xslm").Activate
Range("E20").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Archivo2.xlsm").Activate
Range("A12").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Archivo1.xlsm").Activate
Range("D35").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Archivo2.xlsm").Activate
Range("E12").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Archivo1.xlsm").Activate
Range("E29").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Archivo2.xlsm").Activate
Range("B12").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Archivo1.xlsm").Activate
Range("E27").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Archivo2.xlsm").Activate
Range("C12").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Archivo1.xlsm").Activate
Range("P3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Archivo2.xlsm").Activate
Rows("12:12").Select
Application.CutCopyMode = False
Selection.Cut
Range("A13").Select
Selection.End(xlDown).Select
Selection.End(xlUp).Select
Range("C12").Select
Selection.End(xlDown).Select
Range("A100012").Select
Selection.Insert Shift:=xlDown
Range("C100011").Select
Selection.End(xlUp).Select
Range("A12").Select
ActiveWorkbook. Save
ActiveWindow. Close
End Sub

1 respuesta

Respuesta
1

H o la: Si entendí bien, la macro la ejecutas desde el Archivo1, de cualquier forma, pon la macro en el archivo1, y ejecuta la macro desde el archivo1.

Tal vez lo único que haga falta es saber cuál es la primera celda que vas a copiar del Archivo2. Ya que en el código tienes esto:

Windows("Archivo2.xlsm").Activate
Selection. Copy

Lo mejor es que cambies a algo como esto:

Windows("Archivo2.xlsm").Activate
Range("A10"). Copy

Cambia "A10" por la primera celda que vas a copiar.


Te anexo la macro, cuando ejecutas la macro desde el archivo1, lo que hace es tomar el nombre del archivo y lo pone en la variable nombre, de esa forma, no importa como se llame, la variable almacena cualquier nombre y lo utiliza en las siguientes líneas de la macro.

Sub Macro1()
'
' Macro1 Macro
'
'
    Set l1 = ThisWorkbook
    nombre = l1.Name
    '
    Windows("Archivo2.xlsm").Activate
    Selection.Copy
    Windows(nombre).Activate
    Range("E20").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Windows("Archivo2.xlsm").Activate
    Range("A12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows(nombre).Activate
    Range("D35").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Windows("Archivo2.xlsm").Activate
    Range("E12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows(nombre).Activate
    Range("E29").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Windows("Archivo2.xlsm").Activate
    Range("B12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows(nombre).Activate
    Range("E27").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Windows("Archivo2.xlsm").Activate
    Range("C12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows(nombre).Activate
    Range("P3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Windows("Archivo2.xlsm").Activate
    Rows("12:12").Select
    Application.CutCopyMode = False
    Selection.Cut
    Range("A13").Select
    Selection.End(xlDown).Select
    Selection.End(xlUp).Select
    Range("C12").Select
    Selection.End(xlDown).Select
    Range("A100012").Select
    Selection.Insert Shift:=xlDown
    Range("C100011").Select
    Selection.End(xlUp).Select
    Range("A12").Select
    ActiveWorkbook.Save
    ActiveWindow.Close
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

En realidad desde el archivo 1 solo ejecuto una macro que es para abrir el archivo 2, en este es donde tengo la macro ingreso una información que almaceno como una especie de base de datos, para luego copiarla en el archivo 1

Se puede hacer esa macro que tu me mencionas en el archivo 2??? 

Sí podrías, pero tienes que poner en alguna parte el nombre del archivo1. Por ejemplo, en la macro del archivo1 que abre el archivo2, podrías poner esto:

Sub AbreArchivo2()
    'Esto es un ejemplo
    '
    'Aquí va tu código para abrir tu archivo2
    '
    'tú código
    'En el archivo2 tienes que crear una hoja llamada "temp"
    Sheets("temp").Range("A1").Value = ThisWorkbook.Name
    '
    'Fin tu código
End Sub

Cuando guardes tu archivo2,  procura seleccionar la hoja1, de esa forma siempre estará seleccionada la hoja que vas a utilizar.

Ahora en la macro de tu archivo2:

Sub Macro1()
'
' Macro1 Macro
'
'
    '
    Windows("Archivo2.xlsm").Activate
    '
    nombre = Sheets("temp").Range("A1").Value
    '
    Selection. Copy
    Windows(nombre). Activate
    Range("E20").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Windows("Archivo2.xlsm").Activate
    Range("A12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows(nombre).Activate
    Range("D35").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Windows("Archivo2.xlsm").Activate
    Range("E12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows(nombre).Activate
    Range("E29").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Windows("Archivo2.xlsm").Activate
    Range("B12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows(nombre).Activate
    Range("E27").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Windows("Archivo2.xlsm").Activate
    Range("C12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows(nombre).Activate
    Range("P3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Windows("Archivo2.xlsm").Activate
    Rows("12:12").Select
    Application.CutCopyMode = False
    Selection.Cut
    Range("A13").Select
    Selection.End(xlDown).Select
    Selection.End(xlUp).Select
    Range("C12").Select
    Selection.End(xlDown).Select
    Range("A100012").Select
    Selection.Insert Shift:=xlDown
    Range("C100011").Select
    Selection.End(xlUp).Select
    Range("A12").Select
    ActiveWorkbook.Save
    ActiveWindow.Close
End Sub

Prueba y me comentas.

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

Disculpa pero aun no me queda claro, 

En esta parte de la macro entre paréntesis que debería poner?? ya puse nombre en inglés (mi excel esta en este idioma) y también "Thisworbook.name" pero lo que hizo el excel fue copiarme toda la información en las celdas del archivo2

   Windows(nombre). Activate

Mira esta es la macro que utilizo para abrir el archivo 2, ya la tengo configurada, quizás me puedas guiar como debo modificarla de forma que pueda ejecutar la macro del archivo2 en el archivo1 sin importar que le haya cambiado el nombre  

Sub Auto_Open()

archivo = "F:\Archivo2"
If archivo = False Then Exit Sub
Workbooks.Open archivo

Sheets("Consecutivos").Select
ActiveSheet.Range("A10").Select
End Sub

Así quedaría la macro de tu archivo1, pero antes de ejecutar la macro "Auto_Open", primero debes crear una hoja en el Archivo2 y la llamas "temp"

Sub Auto_Open()
    archivo = "F:\Archivo2"
    If archivo = False Then Exit Sub
    Workbooks.Open archivo
    Sheets("temp").Range("A1").Value = ThisWorkbook.Name
    Sheets("Consecutivos").Select
    ActiveSheet.Range("A10").Select
End Sub

Ya que está abierto tu archivo2, ejecutas la Macro1:

Sub Macro1()
'
' Macro1 Macro
'
'
    '
    Windows("Archivo2.xlsm").Activate
    '
    nombre = Sheets("temp").Range("A1").Value
    '
    Selection. Copy
    Windows(nombre). Activate
    Range("E20").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Windows("Archivo2.xlsm").Activate
    Range("A12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows(nombre).Activate
    Range("D35").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Windows("Archivo2.xlsm").Activate
    Range("E12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows(nombre).Activate
    Range("E29").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Windows("Archivo2.xlsm").Activate
    Range("B12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows(nombre).Activate
    Range("E27").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Windows("Archivo2.xlsm").Activate
    Range("C12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows(nombre).Activate
    Range("P3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Windows("Archivo2.xlsm").Activate
    Rows("12:12").Select
    Application.CutCopyMode = False
    Selection.Cut
    Range("A13").Select
    Selection.End(xlDown).Select
    Selection.End(xlUp).Select
    Range("C12").Select
    Selection.End(xlDown).Select
    Range("A100012").Select
    Selection.Insert Shift:=xlDown
    Range("C100011").Select
    Selection.End(xlUp).Select
    Range("A12").Select
    ActiveWorkbook.Save
    ActiveWindow.Close
End Sub

Prueba y me comentas.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
La pregunta no admite más respuestas

Más respuestas relacionadas