Originariamente Scritto da
raven77
Come prima cosa GRAZIE per la disponibilità (e la celerità, sopratutto!!)....
adesso veniamo ai problemi: se provo a far girare la tua macro (inserendo il path corretto della cartella e un nome a caso delle celle che mi deve leggere) apre tutti i file ma il file RISULTATO.xls risulta vuoto, senza nulla dentro...
mi sorge il dubbio di non essere riuscito a spiegarmi bene io: le celle (rinominate con "Nome", "Cognome", invece che A1, Z300, ecc.ecc.) che la macro mi deve cercare sono inserite tutte in un foglio nominato PAG1 all'interno dei singoli file...
cambia qualcosa?
Per prima cosa, cambia il fatto che il mio esempio va a cercare il testo nel primo foglio del file, accendendo quindi all'insieme Worksheets per indice (ovvero 1)
Codice:
Set xlsSheetData = xlsBookData.Worksheets(1)
Nel tuo caso, dovrai invece accedere per chiave, che corrisponde proprio al nome del foglio
Codice:
Set xlsSheetData = xlsBookData.Worksheets("PAG1")
If xlsSheetData Is Nothing Then
MsgBox "Foglio 'PAG1' non trovato", vbExclamation
Else
'hai trovato il foglio che ti interessa
End If
Per quanto riguarda la faccenda delle celle "rinominate", se ho capito bene cosa intendi, ovvero se è stata usata la funzione di Excel "Inserisci nome intervallo" per dare l'etichetta alle celle, allora la cosa potrebbe anche essere più semplice.
Esiste infatti l'insieme Workbook.Names che contiene tutte le etichette dell'intero file, indipendentemente dal foglio... per arrivare alla cella che ti interessa potrebbe quindi bastare, al posto di
Codice:
Set xlsSheetData = xlsBookData.Worksheets(1)
Set xlsFoundCell = xlsSheetData.Cells.Find("Totali")
If Not xlsFoundCell Is Nothing Then
xlsSheetResult.Cells(i, 1).Value = "File " & fileName & ":"
xlsSheetResult.Cells(i, 2).Value = xlsFoundCell.Next.Value
End If
qualcosa del genere
Codice:
Dim n As Name
Set n = xlsBookData.Names("Nome")
If Not n Is Nothing Then
'hai trovato il nome che ti serve, ora 'RefersToRange' ti
'da l'oggetto cella corrispondente
Set xlsFoundCell= n.RefersToRange
xlsSheetResult.Cells(i, 1).Value = "File " & fileName & ":"
xlsSheetResult.Cells(i, 2).Value = xlsFoundCell.Value
End If
'Ripetere per le altre etichette da cercare
che, incidentalmente, ti risparmia anche di fare la prima correzione suddetta