Pensavo sarebbe stato piu’ semplice ma non e’ stata così...
In particolare e’ stato non semplice immaginare come l’utente possa scegliere 5-10 intervalli e poi saperli riposizionere correttamente al momento del copia/incolla.
Quello che propongo e’ una soluzione che funziona in questo modo:
-in un prima fase l’utente identifica e salva la descrizione delle aree da migrare
-in una seconda fase all’utente vengono presentate in sequenza le aree salvate, e puo’ Incollarle nel file di destinazione previa scelta della posizione di salvataggio
Il tutto e’ dimostrato nel file scaricabile qui:
https://www.dropbox.com/s/g9yurh4ksh3lz ... .xlsm?dl=0Piu’ in dettaglio:
A) Partendo da Foglio1, il pulsante avvia una form di guida, che imposta la fase di “Copia”
B) Scegliere le aree da salvare:
1)Selezionare a mano il workbook e il foglio; selezionare l’intervallo da Copiare
2)Tornare sulla Form e premere il pulsante
Salva. Il TextBox (TB) “B” indica nome file, nome foglio, intervallo selezionato
3)Premere
Next: il tb A indicherà “2”, il tb B viene svuotato, per accogliere la nuova selezione
Ripetere le fasi 1-2-3 per tutte le aree da Copiare
Usando i “pulsanti”
< e
> del gruppo C ci si puo’ spostare tra le posizioni salvate. E’ possibile modificare una posizione riposizionandosi sul blocco da modificare, riselezionare una nuova area, premere Salva; un msgbox chiedera’ conferma della volontà di sostituire i dati coi nuovi.
C) Completato il salvataggio delle aree da copiare si preme il pulsante
Vai a Incolla, che abilita il secondo blocco di pulsanti e imposta nei tb A e B i dati del primo blocco da Copiare /Incollare
1)Premere il pulsante
Incolla: verrà chiesto di selezionare l’area dove incollare (che deve essere sul file che contiene le macro in esecuzione) e verrà eseguito il Copia /Incolla speciale – Valori.
Se si ripreme Incolla (senza prima fare Next) verrà chiesto se si vuole incollare nuovamente lo stesso blocco
2)Premere
Next per avanzare al blocco successivo. Se si premesse Next senza aver Incollato il blocco un msgbox avverte e chiede se skippare o no. Premendo Next quando si e’ gia’ arrivati all’ultimo blocco un msgbox avvisa che e’ finita
D) Completato il Copia /Incolla si puo’ chiudere la form con la
X oppure si puo’ cominciare una nuova fase di Copia, tornando alla fase B, tramite il pulsante
Nuova CopiaNote:
-il file slave (quello da cui copiare) puo' essere gia' "aperto" all'avvio della form, ma puo' anche venire aperto con la form gia' visualizzata.
-teoricamente un ciclo potrebbe selezionare anche da piu' file "slave", ma mi sembra un buon modo per incasinarsi
-l'area di Incolla deve trovarsi sul file che contiene le macro in esecuzione
Cose che non mi piacciono ma che non sono riuscito ad aggirare:
-lo spostamento tra i file va fatto a mano; non sono infatti riuscito a muovermi tra i file in modo affidabile tramite vba (ad esempio per tornare sul foglio su cui selezionare le aree da copiare dopo aver salvato una selezione)
-la form e’ associata al file “master”, quindi non e’ visibile mentre si sceglie l’area da copiare; bisogna quindi dalla form andare manualmente al file slave (quello da cui copiare), fare la selezione, tornare al file master per il ciclo Salva /Next, tornare al file slave per rifare la seconda selezione; e così via avanti e indietro
Per cominciare puoi simulare qualcosa lavorando sul foglio Demo.
Per importare poi le macro nel tuo file “master”:
1) copiare il contenuto di Modulo1 in un nuovo Modulo del tuo vba
2) esportare la userform e importarla nel tuo file
-dal vba: selezionare la userform; Menu /File /Esporta file. Verrano creati un file .frm e uno .frx
-selezionare il progetto vba del tuo file; Menu /File /Importa file: seleziona il file frm precedentemente creato e importarlo
Prova e poi vedremo che farne...