Sviluppare funzionalita su Microsoft Office con VBA Unione di diversi dataset da più file XLS o XLSX in un file Master

Login Registrati
Stai vedendo 4 articoli - dal 1 a 4 (di 4 totali)
  • Autore
    Articoli
  • #43186 Score: 0 | Risposta

    planera63
    Partecipante

      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 FileDialog
      Dim sPath As String
      Dim fso As Object
      Dim f As Object
      Dim ri As Integer
      Dim wb As Workbook
      Dim thiswb As Workbook
      Dim r As Range
      Dim n As Integer

      Set fd = Application.FileDialog(4) 'msoFileDialogFolderPicker
      With fd
      fd.Title = "Seleziona la cartella con i file"
      If .Show = 0 Then Exit Sub
      End With

      sPath = fd.SelectedItems(1)
      Set thiswb = ThisWorkbook
      Set fso = CreateObject("Scripting.FileSystemObject")

      ri = 2

      With Application
      .Cursor = xlWait
      .EnableEvents = False
      .ScreenUpdating = False
      End With

      For Each f In fso.GetFolder(sPath).Files
      If Left$(f.Name, 1) <> "~" And fso.GetExtensionName(f) Like "xls" _
      Or fso.GetExtensionName(f) Like "xlsx" Then

      Set wb = Workbooks.Open(f.Path, ReadOnly:=True)
      Set r = wb.Worksheets("Chimico-fisici").Range("A1").CurrentRegion
      Set r = r.Offset(1).Resize(r.Rows.Count - 1)
      r.Copy thiswb.Worksheets("Dati").Cells(ri, "A")
      ri = ri + r.Rows.Count 'riga 40
      n = n + 1
      thiswb.Worksheets("Files").Cells(n, "A") = f.Name
      wb.Close False
      End If
      Next

      With Application
      .Cursor = xlDefault
      .EnableEvents = True
      .ScreenUpdating = True
      End With

      Range("A1").Select
      MsgBox "Ho terminato." & vbNewLine & n & " files importati. Seleziona il foglio ""Files"" per vedere i file importati."
      End Sub

      Ho 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.
      #43189 Score: 0 | Risposta

      rollis13
      Partecipante
        8 pts

        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

        #43204 Score: 0 | Risposta

        planera63
        Partecipante

          Grazie.

          Non avevo pensato a questo problema. Ora funziona magnificamente.

          #43206 Score: 0 | Risposta

          rollis13
          Partecipante
            8 pts

            Grazie per il riscontro positivo , sono contento d'essere stato di qualche aiuto.

          Login Registrati
          Stai vedendo 4 articoli - dal 1 a 4 (di 4 totali)
          Rispondi a: Unione di diversi dataset da più file XLS o XLSX in un file Master
          Gli allegati sono permessi solo ad utenti REGISTRATI
          Le tue informazioni: