Saltar al contenido

Macro que pegue en un libro activo


areco747

Recommended Posts

publicado

Buenas tardes, necesitaría por favor si me pueden pasar la macro que vaya y copie un valor de una celda de un LibroX ( abierto) y lo pegue en una celda activa de pero de otro libro con la que estoy trabajando. Este último libro no siempre es el mismo, va cambiando de nombre, o sea que el libro de Destino varia. Desde ya muchas gracias.

publicado

Hola areco747 quisiera que me aclares algunas dudas para poder ayudarte.

Tu libro de origen que esta abierto, el de destino tambien estaria abierto o cerrado?

Ademas tambien quisiera saber si el dato que desea trasladar es una sola celda o una columna completa.

Saludos

publicado

Hola como menciona el amigo elunico22 debes ser un poco mas preciso en tu consulta, cual es la ruta de tu archivo, que rango de celdas quieres copiar, las copias con o sin formato, siempre debes de subir un archivo de ejemplo Normas del foro.

Por el momento te dejo un ejemplo suponiendo que el libro origen se llama "ejem.xlsx" y lo tienes en la misma ruta que el de destino copia el valor de la celda A1:

Sub copia()
Application.ScreenUpdating = False
Workbooks.Open Filename:=(ThisWorkbook.Path & "\ejem.xlsx")
[A1].Copy
Application.DisplayAlerts = False
ActiveWindow.Close
Range("A1").PasteSpecial (xlPasteAll)
End Sub
[/PHP]

Salu2[/color]

publicado

Muchas gracias por la respuesta, no he subido un ejemplo por tratarse de dos libros. El libro de origen está abierto pero cambia constatemente de nombre y el libro de origen es siempre el mismo se llama Personal.xls, también siempre se encuentra abierto. O sea que el libro Personal.xls es el que contiene las macros y el que está permantentemente abierto. Por qué el libro de origen cambia constantemente de nombre? porque son resumenes de cuenta que se van creando constantemente de y que estoy exportando de SAP. El dato o valor se debe pegar en una sola celda en el libro de origen. Pero esta celda es activa no es fija. Este seria el ejemplo que toma como la celda de origen A35

Sub copiarActivecell()

Windows("Personal.xls").Activate

Range("A35").Select

Application.CutCopyMode = False

Selection.Copy

A partir de acá no lo puedo resolver porque mi libro va cambiando de nombre.

Windows(".xls").Activate

ActiveSheet.Paste

Application.CutCopyMode = False

End Sub

publicado

Hola areco747 estoy tratando de entender tu post, pero nuevamente me has confundido.

Dices que el libro de origen varia de nombre por tratarse de un resumen que bajas del sap.

Y nuevamente pusiste que el de origen es Personal.xls, no sera de destino?.

Ademas indicas que tienes que pegar en una celda activa del archivo de origen? Se supone que el origen es de donde copias y el destino a donde vas a copiar.

Disculpa si pregunto nuevamente pero he quedado un poco confundido.

Saludos

publicado
El libro de origen está abierto pero cambia constantemente de nombre y el libro de origen es siempre el mismo se llama Personal.xls

Ok parte confusa.

Lo que te recomiendo es crear un complemento ".xlam" luego lo configuras en excel y listo puedes ejecutar la macro en el archivo que cambia de nombre sin problemas y para completar tu macro seria algo así

Sub copiarActivecell()
nom=ActiveWorkbook.name
Windows("Personal.xls").Activate
Range("A35").Select
Application.CutCopyMode = False
Selection.Copy

Windows(nom).Activate

ActiveSheet.Paste
Application.CutCopyMode = False
End Sub[/PHP]

Salu2

publicado

Perdón pido disculpas por la confusión, lo transcribo nuevamente: El libro de destino está abierto pero cambia constantemente de nombre y el libro de origen es siempre el mismo se llama Personal.xls, también siempre se encuentra abierto. O sea que el libro Personal.xls es el que contiene las macros y el que está permanentemente abierto.

Por qué el libro de destino cambia constantemente de nombre? porque son resumenes de cuenta que se van creando constantemente y que estoy exportando de SAP. El dato o valor se debe pegar en una sola celda en el libro de destino. Pero esta celda es activa no es fija. Este seria el ejemplo que toma como la celda de origen A35.

Intentaré con lo de Riddle

publicado

Hola disculpas pero no doy con la tecla... adjunto dos archivos excel para ver si pueden interpretarlo o tal vez si pueden adaptar la macro de Riddle. Para este ejemplo parto del libro personal.xls y de la celda de origen B7 copia y pega en el libro1 en una celda activa, como les comenté necesito que la macro no se diagrame como libro de destino libro1, porque el nombre de este libro va cambiando constantemente. Y debe pegar en una celda activa. Cualquier duda a disposición y gracias,

personal.xls

libro1.xls

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      187
    • Comentarios
      97
    • Revisiones
      29

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    2    1

  • Crear macros Excel

  • Mensajes

    • Que tal nuevamente,  adjunto una solución alternativa: =MAX(A:.A)-BYROW(F4:.AK20,LAMBDA(r,BUSCAR(2,1/(r=0),F3:.AK3))) Cabe mencionar que esta solución requiere funciones nuevas como RECORTAR.RANGO. CONTADOR FINAL (Solucion).xlsb
    • Buenos días,  espero se encuentren bien de salud compañeros, Favor me podrían ayuda con lo siguientes como se podría hacer cuando tengo una tabla dinámica que  amedida que se aumente las columnas fechas con data un formula que se coloco al final busque o analice siempre la ultima fila y columna de la fecha. Coloco un ejemplo
    • @JSDJSD Excelentes, GRACIAS POR TU SOPORTE , me ayudo demasiado es exactamente lo que quería. 5 ESTRELLAS
    • 'Opción 1 Sub FiltrarSKUPorFecha(): Application.ScreenUpdating = False Dim ultimaFila As Long, fila As Long Dim diccionarioSKU As Object Dim listaEliminar As Object Dim fechaActual As String, fechaSiguiente As String Dim f As Variant With Sheets("Consolidado") ultimaFila = .Cells(.Rows.Count, 1).End(xlUp).Row ' Crear diccionarios para comparar SKU y almacenar filas a eliminar Set diccionarioSKU = CreateObject("Scripting.Dictionary") Set listaEliminar = CreateObject("Scripting.Dictionary") ' Recorrer desde la primera fila hasta la penúltima For fila = 2 To ultimaFila - 1 fechaActual = .Cells(fila, 1).Value fechaSiguiente = .Cells(fila + 1, 1).Value ' Solo comparar la fecha actual con la siguiente (inmediatamente superior) If fechaActual <> fechaSiguiente Then diccionarioSKU.RemoveAll ' Limpiar el diccionario antes de llenarlo ' Guardar los SKU de la fecha siguiente (solo de la siguiente) For f = fila + 1 To ultimaFila If .Cells(f, 1).Value <> fechaSiguiente Then Exit For diccionarioSKU(.Cells(f, 2).Value) = 1 Next f ' Revisar los SKU de la fecha actual y marcar los que deben eliminarse For f = fila To 2 Step -1 If .Cells(f, 1).Value <> fechaActual Then Exit For ' Solo eliminar si el SKU no está en la fecha siguiente If Not diccionarioSKU.exists(.Cells(f, 2).Value) Then listaEliminar(f) = 1 ' Marcar fila para eliminar después End If Next f ' Ya no es necesario seguir buscando después de comparar la primera y la siguiente fecha Exit For End If Next fila ' Eliminar las filas marcadas sin afectar el bucle principal For Each f In listaEliminar.keys .Rows(f).Delete Next End With MsgBox "Completado correctamente.", vbInformation End Sub 'Opción 2 Sub FiltrarSKUPorFecha1(): Application.ScreenUpdating = False Dim ultimaFila As Long, fila As Long Dim listaEliminar As Collection Dim fechaActual As String, fechaSiguiente As String Dim f As Variant, i As Long Dim SKUExiste As Boolean With Sheets("Consolidado") ultimaFila = .Cells(.Rows.Count, 1).End(xlUp).Row ' Inicializar la colección para marcar las filas a eliminar Set listaEliminar = New Collection ' Recorrer desde la primera fila hasta la penúltima For fila = 2 To ultimaFila - 1 fechaActual = .Cells(fila, 1).Value fechaSiguiente = .Cells(fila + 1, 1).Value ' Solo comparar la fecha actual con la siguiente (inmediatamente superior) If fechaActual <> fechaSiguiente Then ' Revisar los SKU de la fecha actual y marcar los que deben eliminarse For f = fila To 2 Step -1 If .Cells(f, 1).Value <> fechaActual Then Exit For ' Comprobar si el SKU está en la fecha siguiente SKUExiste = False For i = fila + 1 To ultimaFila If .Cells(i, 1).Value <> fechaSiguiente Then Exit For If .Cells(i, 2).Value = .Cells(f, 2).Value Then SKUExiste = True Exit For End If Next i ' Si el SKU no se encuentra en la fecha siguiente, marcar para eliminar If Not SKUExiste Then listaEliminar.Add f ' Marcar fila para eliminar después End If Next f ' Ya no es necesario seguir buscando después de comparar la primera y la siguiente fecha Exit For End If Next fila ' Eliminar las filas marcadas sin afectar el bucle principal For Each f In listaEliminar .Rows(f).Delete Next f End With MsgBox "Completado correctamente.", vbInformation End Sub   TABLA ELIMINAR.xlsm
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.