Ciao Norman,
ti chiedo scusa.
Nell'esempio che ti ho postato sopra, ho ricostruito il percorso per evitare di scriverti in nome delle cartelle poiché ogni cartella ha il nome del cliente (per motivi di riservatezza volevo evitare di pubblicarli).
Dunque, riepilogo la condizione reale:
La cartella x:\schede prezzo si trova su un server x:\
Al suo interno sono contenute esattamente 89 cartelle il cui nome corrisponde al nome del cliente (preferirei evitare di pubblicarlo).
All'interno di ogni cartella col nome del cliente sono contenuti i file (relativi a quel cliente) da cui voglio estrarre i dati.
Facendo girare la seguente macro:
'=========>>
Option Explicit
'--------->>
Public Sub Tester()
Dim FSO As Object
Dim oFile As Object
Dim oFiles As Object
Dim oFolder As Object
Dim oSubFolder As Object
Dim WB As Workbook
Dim SH As Worksheet, destSH As Worksheet
Dim Rng As Range, rCell As Range
Dim arrExclude As Variant, arrHeaders As Variant
Dim iRow As Long
Dim j As Long, k As Long
Dim myFile As String, myFolder As String
Dim Res As Variant
Const sAddress = "F2,K2,C4,H4,C6,H6,E8,I7,I8,J8,L8,E9,I9,E10,E11,E12,E13,I14,J15,E16,J17,J18" '<<==== Modifica
Const sFolder As String = "X:\SCHEDE PREZZO" '<<==== Modifica
Const sHeaders As String = "FILE ORIGINE,FOGLIO DI ORIGINE,CLIENTE,DATA,DESCRIZIONE,CODICE,DIMENSIONE,REVISIONE DISEGNO,PESO BARRA,BARRA EXT,MISURA EXT,BARRA INT,MISURA INT,LUNGH SPEZZ,MATERIALE,BASE METALLO,EXTRA MISURA,TOTALE METALLO,VALORE SFRIDO,PESO
OCCORRENTE,COSTO MATERIALE,PESO FINITO,RECUPERO SFRIDO,COSTO MATERIA PRIMA"
Set WB = ThisWorkbook
Set destSH = WB.Sheets(1)
iRow = 1
arrExclude = VBA.Array("Calcolo peso", "Forme", "Calcolo peso ")
arrHeaders = Split(sHeaders, ",")
destSH.Range("A1:X1").Value = arrHeaders
On Error GoTo XIT
Application.ScreenUpdating = False
Set FSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = FSO.GetFolder(sFolder)
For Each oSubFolder In oFolder.SubFolders
Set oFiles = oSubFolder.Files
For Each oFile In oFiles
Application.StatusBar = "Processing il file " & oFile.Path
Set WB = Workbooks.Open(oFile)
With WB
For Each SH In WB.Worksheets
With SH
j = 1
Res = Application.Match(.Name, arrExclude, 0)
If IsError(Res) Then
iRow = iRow + 1
With destSH
.Cells(iRow, "A").Value = WB.FullName
.Cells(iRow, "B").Value = SH.Name
Set Rng = SH.Range(sAddress)
For Each rCell In Rng.Cells
j = j + 1
.Cells(iRow, j + 1).Value = rCell.Value
Next rCell
End With
End If
End With
Next SH
.Close savechanges:=False
End With
Next oFile
Next oSubFolder
destSH.UsedRange.EntireColumn.AutoFit
XIT:
With Application
.ScreenUpdating = True
.StatusBar = False
End With
End Sub
'<<=========
Parte l'estrazione, estrae TUTTI i dati nei file contenuti nella prima cartella, mi mostra l'avanzamento, ma NON PASSA ALLA SECONDA CARTELLA e alle successive.
Chiedo ancora scusa per l'esempio che ti ho postato ieri, la mia intenzione di non pubblicare i nomi dei clienti ha creato solo casino.
Qualora volessi darmi il tuo indirizzo email posso inviarti il file.
Grazie.