Sto cercando di risolvere un problema relativamente semplice ma non riesco a realizzarlo. Il mio obiettivo è copiare un intervallo di celle in un foglio di lavoro dell'Applicazione Excel principale in un altro intervallo (della stessa dimensione) in un foglio di lavoro di una seconda applicazione Excel appena creata. Creo la seconda applicazione utilizzandoVB: copia un intervallo in un'altra applicazione Excel
Set secondExApp = CreateObject("Excel.Application")
Sto usando questo riferimento per ulteriori informazioni. Fino ad ora ho provato due modi diversi. Entrambi non funzionano correttamente.
0 .: Preparazione/Introduzione
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 - l'immagine è invece di gamma
srcSheet.Range("A1:B2").Copy
dstSheet.Range("A1:B2").PasteSpecial xlPasteAll
2 .: Range.Copy [Destinazione (!) ] - non funziona - È giusto che io possa usare questo metodo solo per i fogli nella stessa applicazione?
srcSheet.Range(srcSheet.Cells(..., ...), srcSheet.Cells(..., ...)).Copy _
dstSheet.Range(dstSheet.Cells(..., ...), dstSheet.Cells(..., ...))
Qualsiasi aiuto è apprezzato.
Edit: Ho già giocato con la funzionalità "record di macro", ma io preferisco la codifica per conto mio senza "selezione" o "l'attivazione di" cellule/fogli/ecc
Edit (risolto): Grazie sia GSerg e iDevlop molto, consegnato un buon un'ulteriore punto di partenza per me. Ho fatto qualche ricerca per quanto riguarda le costanti di Excel come xlClipboardFormatDspText
.
Ciò che mi ha veramente aiutato è il fatto che l'apertura di una nuova istanza di Excel cambia il menu Incolla (speciale).
Così invece di creare una nuova istanza ora aggiungo semplicemente una cartella di lavoro (che può essere nascosta) e uso questo oggetto per aggiungere il mio contenuto. Dato che è tenuto nella stessa istanza (anche dare un'occhiata al task manager) il menu Incolla (Speciale) è completamente lo stesso.
Ora è possibile utilizzare Range.Copy [destinazione] anche senza selezionare!
Risultato:
'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
Perché utilizzare una seconda app Excel invece di un'altra cartella di lavoro nella stessa istanza di Excel? L'unico bonus che posso vedere è quello di sfruttare il processore dual core per calcoli enormi. Ma è più lento se non ne hai bisogno. –
@iDevlop Che strano. Ho appena letto il tuo commento dopo che ho scoperto su me stesso. Commento molto utile! – Mic