Ad esempio:
- Codice: Seleziona tutto
Sub DemoVal()
Dim Sorg As Range, Dest As String, ceLL As Range
Dim SorSh As Worksheet
'
Dest = "C:\Users\Percorso\NomeFile.xlsm" '<<< Il file destinazione
On Error Resume Next
Set Sorg = Application.InputBox("Seleziona gli intervalli da copiare", "Seleziona...", , , , , , 8)
On Error GoTo 0
If Not Sorg Is Nothing Then
Set SorSh = ActiveSheet
Application.EnableEvents = False 'Nota***
Workbooks.Open Dest
Sheets(1).Select '<<< Il foglio di destinazione
For Each ceLL In Sorg
SorSh.Range(ceLL.Address).Copy Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
' "e cosi' via"
' Exit For '--- Solo per debug (ESCE dopo la prima copia)
Next ceLL
ActiveWorkbook.Close savechanges:=True
Application.EnableEvents = True 'Nota***
End If
'
End Sub
Mettila in un Modulo standard del vba; le righe marcate <<< sono da personalizzare come da commenti.
Le istruzioni marcate "Nota***" impediscono l'esecuzione di eventuali macro "di evento" sul file di destinazione (tipo WorkbookOpen, WorkbookBeforeSave, WorksheetChange e tutti i potenziali "eventi" a livello di workbook o worksheet); se questo non e' compatibile col tuo file elimina tali istruzioni.
Quando mandi in esecuzione la macro:
-viene chiesto all'operatore di indicare le aree da copiare; puoi scrivere gli intervalli usando le convenzioni Excel, oppure puoi selezionarle sempre usando le convenzioni Excel.
-premendo Ok le celle vengono copiate e incollate
una per una in colonna A sotto le celle gia' presenti.
Per realizzare la tua logica dovrai modificare il le istruzioni all'interno del ciclo For Each ceLL In Sorg / Next ceLL.
Ciao