› Sviluppare funzionalita su Microsoft Office con VBA › Unione di diversi dataset da più file XLS o XLSX in un file Master
-
AutoreArticoli
-
Salve.
Lo so l'argomento è trito e ritrito. Ma devo fare questa operazione in breve tempo, ho provato a cercare ma non ho trovato quello che fa per me.
Mi potreste aiutare, perché ho già una macro che dovrebbe svolgere parte di questa operazione descritta nel titolo, però dopo aver copiato i dati di tre file (36522 record) mi da il seguente errore:
Errore di runtime '6': overflow
Facendo il debug evidenzia la riga 40 dello script.
Io ho circa 100 file xls e xlsx in una cartella e un file Master che allego che contiene il foglio "Dati" con la stessa intestazione (prima riga) dei file da accodare. Nel foglio Files saranno scritti i nomi dei file accodati.
Ecco il codice
Sub Pulsante1_Click()Dim fd As FileDialogDim sPath As StringDim fso As ObjectDim f As ObjectDim ri As IntegerDim wb As WorkbookDim thiswb As WorkbookDim r As RangeDim n As IntegerSet fd = Application.FileDialog(4) 'msoFileDialogFolderPickerWith fdfd.Title = "Seleziona la cartella con i file"If .Show = 0 Then Exit SubEnd WithsPath = fd.SelectedItems(1)Set thiswb = ThisWorkbookSet fso = CreateObject("Scripting.FileSystemObject")ri = 2With Application.Cursor = xlWait.EnableEvents = False.ScreenUpdating = FalseEnd WithFor Each f In fso.GetFolder(sPath).FilesIf Left$(f.Name, 1) <> "~" And fso.GetExtensionName(f) Like "xls" _Or fso.GetExtensionName(f) Like "xlsx" ThenSet wb = Workbooks.Open(f.Path, ReadOnly:=True)Set r = wb.Worksheets("Chimico-fisici").Range("A1").CurrentRegionSet r = r.Offset(1).Resize(r.Rows.Count - 1)r.Copy thiswb.Worksheets("Dati").Cells(ri, "A")
ri = ri + r.Rows.Count 'riga 40n = n + 1thiswb.Worksheets("Files").Cells(n, "A") = f.Namewb.Close FalseEnd IfNextWith Application.Cursor = xlDefault.EnableEvents = True.ScreenUpdating = TrueEnd WithRange("A1").SelectMsgBox "Ho terminato." & vbNewLine & n & " files importati. Seleziona il foglio ""Files"" per vedere i file importati."End SubHo provato a vedere se il terzo file accodato e il 4 file che dovrebbe essere accodato hanno qualche anomalia nel format dei dati ma non ho trovato nulla. Ho provato a togliere il 4° file, ma il programma si blocca sempre dopo il terzo file.
Allego il file con il codice "MergeFilesIntoMaster_D5_App_Ver0.xlsm" che contiene un bottone nel foglio "Dati" che esegue il codice, e 6 file con i dati da accodare nel foglio "Chimico-fisici"
Allegati:
You must be logged in to view attached files.Hai dichiarato la variable ri come Integer e una volta superato il valore massimo positivo dell'integer la macro va in errore. Cambia la dichiarazione in Long e vedrai che ti andrà sicuramente meglio.
Vedi anche: https://learn.microsoft.com/it-it/dotnet/visual-basic/programming-guide/language-features/data-types/numeric-data-types
Grazie.
Non avevo pensato a questo problema. Ora funziona magnificamente.
-
AutoreArticoli
