La macro, apre i file presenti all'interno di una cartella (hanno tutti la stessa struttura, variano solo nel numero di righe), copia i range di dati e dovrebbe incollarli su di un altro file chiamato "Template".
Il problema sta nel fatto che lanciando la macro vedo effettivamente la selezione dei range che mi interessano, quando va però a incollare, mi incolla tutto non tenendo conto dei range impostati.
Se però eseguo soltanto la parte del range copia e incolla su di un altro file, giusto per prova, funziona tutto correttamente, c'è quindi qualche interferenza tra la struttura della macro e la parte del copia e incolla
Di seguito la macro
- Codice: Seleziona tutto
Sub copia300gol()
'dichiaro le variabili
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim wk As Workbook
Dim tmp As Workbook
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim C1, C2, C3, C4, UNIONE As Range 'dichiariamo come Range tutte le variabili
'impedisco lo sfarfallio dello schermo
Application.ScreenUpdating = False
'metto un riferimento alle cartelle in cui si trovano i files
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder("C:\Users\pietro\Desktop\DATI TECNICI\GRUPPO GOL_300")
'PER OGNI FILE NELLA CARTELLA LO APRE E APRE ANCHE IL FILE TEMPLATE
For Each objFile In objFolder.Files
Set tmp = Workbooks.Open("C:\Users\pietro\Desktop\DATI TECNICI\TEMPLATE.xlsx")
Set wk = Workbooks.Open(objFile.Path)
'metto i riferimenti ai fogli
Set sh2 = tmp.Worksheets("300")
Set sh1 = wk.Worksheets("GasOnLine Export")
With sh1
'metto un riferimento ai range da copiare
Set C1 = Range("C2:Q2", Range("C2").End(xlDown)) 'primo intervallo di 10 celle che inizia dalla riga 1
Set C2 = Range("U2:U2", Range("u2").End(xlDown)) 'secondo intervallo che inizia sulla stessa riga e sempre di 10 celle
Set C3 = Range("W2:X2", Range("w2").End(xlDown)) 'terzo intervallo che inizia sulla stessa riga e sempre di 10 celle
Set C4 = Range("AW2:bi2", Range("aw2").End(xlDown)) 'QUARTO intervallo che inizia sulla stessa riga e sempre di 10 celle
'unisco i range
Set UNIONE = Union(C1, C2, C3, C4)
'copio da un file all'altro
UNIONE.Select
UNIONE.Copy
'chiudo il file dal quale sono copiati i dati
wk.Close SaveCHANGES:=False
End With
'With Application
'.CutCopyMode = False
'.ScreenUpdating = True
'End With
'trova la prima riga libera disponibile del file "template" e copia il range selzionato
Range("A1").End(xlDown).Select
Selection.Offset(1, 0).Select
x = ActiveCell.Row
sh2.Range("A" & x).PasteSpecial
'CHIUDI IL FILE DELLA RELATIVA CARTELLA
tmp.Save
Next
End Sub