salve avrei bisogno di supporto per perfezionare la mia macro per excel.
avevo bisogno che un file excel copiasse i dati da una serie di file diversi per inserirli in un unico foglio di excel senza ripetizioni e inserendo nell'ultima colonna il nome del file dal quale proveniva.
di seguito vi riporto il codice creato finora.
esegue quasi tutto ma mi riporta solo 1 volta il nome del file e non verifica se i dati sono già presenti nel foglio quindi crea ripetizioni.
potete aiutarmi a perfezionare questa macro?
grazie infinite
Enzo
Public Sub m()
'dichiarazioni variabili
Dim wkMe As Workbook
Dim wk As Workbook
Dim shMe As Worksheet
Dim sh As Worksheet
Dim sPath As String
Dim sFileName As String
Dim lRiga As Long
Dim lColonna As Long
Dim rng As Range
'metto un riferimento a questo Workbook
'e al Foglio Storico
Set wkMe = ThisWorkbook
Set shMe = wkMe.Worksheets("Storico")
'metto nella variabile il percorso di questo file
sPath = wkMe.Path & ""
'impedisco lo *sfarfallio* del monitor
Application.ScreenUpdating = False
'ciclo TUTTI i file della Directory
sFileName = Dir(sPath & "*.xls*")
Do While (Len(sFileName) > 0)
On Error Resume Next
'se il nome del file è diverso da quello che contiene il codice
If sFileName <> wkMe.Name Then
'metto un riferimento e apro il file
Set wk = Workbooks.Open(Filename:=sPath _
& sFileName)
'metto un riferimento al Foglio1
Set sh = wk.Worksheets("Foglio1")
'metto un riferimento al Range del Foglio1 che contiene i dati
Set rng = sh.Range("A1").CurrentRegion
'copio i dati ad eccezione della prima riga (di solito è l'intestazione)
rng.Offset(1, 0).Resize(rng.Rows.Count, rng.Columns.Count).Copy
'trovo la prima riga vuota della colonna A del Foglio Storico
lRiga = shMe.Range("A" & Rows.Count).End(xlUp).Row + 1
'incollo i dati nel foglio Storico
shMe.Range("A" & lRiga).PasteSpecial
shMe.Range("F" & lRiga).Value = sFileName
Application.CutCopyMode = False
'chiudo il file dal quale ho prelevato i dati
wk.Close
'Set a Nothing delle variabili oggetto
Set sh = Nothing
Set wk = Nothing
End If
sFileName = Dir
Loop
'visualizzo il risultato della macro
Application.ScreenUpdating = True
'Set a Nothing delle variabili oggetto
Set shMe = Nothing
Set wkMe = Nothing
End Sub