Estoy tratando de resolver un problema relativamente simple pero no me puedo dar cuenta. Mi objetivo es copiar un rango de celdas en una hoja de trabajo de la aplicación principal de Excel a otro rango (del mismo tamaño) en una hoja de trabajo de una segunda aplicación de Excel recién creada. Creo la segunda aplicación usandoVB: Copie un rango a otra aplicación de Excel
Set secondExApp = CreateObject("Excel.Application")
Estoy usando esta referencia para un manejo posterior. Hasta ahora lo he intentado de dos maneras diferentes. Ambos no funcionan correctamente.
0 .: Preparación/Introducción
Set srcWb = Application.ActiveWorkbook
Set srcSheet = srcWb.Worksheets("example")
Set dstApp = CreateObject("Excel.Application")
Set dstWb = dstApp.Workbooks(1)
Set dstSheet = dstWb.Worksheets(1)
1 .: PasteSpecial - ofrece una imagen en lugar de sólo la gama
srcSheet.Range("A1:B2").Copy
dstSheet.Range("A1:B2").PasteSpecial xlPasteAll
2 .: Range.Copy [Destino (!) ] - no funciona - ¿Es correcto que solo puedo usar este método para hojas en la misma aplicación?
srcSheet.Range(srcSheet.Cells(..., ...), srcSheet.Cells(..., ...)).Copy _
dstSheet.Range(dstSheet.Cells(..., ...), dstSheet.Cells(..., ...))
Cualquier ayuda es apreciada.
Edición: Ya he jugado con la funcionalidad "Grabar macro" pero yo prefiero la codificación por mi cuenta sin "seleccionar" o "activación" células/hojas/etc
Editar (resuelto): Gracias a los dos GSerg y iDevlop mucho, que entregan un buen punto de partida más para mí. Investigué en cuanto a las constantes de Excel como xlClipboardFormatDspText
.
Lo que realmente me ayudó fue el hecho de que la apertura de una nueva instancia de Excel cambia el menú Pegar (Especial).
Así que en lugar de crear una nueva instancia que ahora simplemente añadir un libro (que se puede ocultar) y utilizar este objeto para agregar el contenido de mi. Dado que se mantiene en la misma instancia (también eche un vistazo al administrador de tareas), el menú Pegar (Especial) es completamente el mismo.
Ahora es posible usar Range.Copy [destino] incluso sin seleccionar!
Resultado:
'Hides the new workbook
Application.ScreenUpdating = False
Set dstWb = Workbooks.Add
Set dstSheet = dstWb.Worksheets(1)
srcSheet.Range(srcSheet.Cells(..., ...), srcSheet.Cells(..., ...)).Copy
dstSheet.Paste dstSheet.Range(dstSheet.Cells(..., ...), dstSheet.Cells(..., ...))
'Avoids the often seen dashed border around the copied range
Application.CutCopyMode = False
'Setting the initial change back
Application.ScreenUpdating = True
Software: Excel 2007
¿Por qué utilizar una segunda aplicación de Excel en lugar de otro libro en la misma instancia de Excel? La única ventaja que puedo ver es aprovechar el procesador de doble núcleo para cálculos enormes. Pero es más lento si no necesitas eso. –
@iDevlop Qué gracioso. Acabo de leer tu comentario después de que me enteré. ¡Muy útil comentario! – Mic