Proviamo.
In un nuovo file di Excel, il codice qui
sotto in un modulo standard ed elencheremo
i dati nel suo Foglio1 nelle seguenti colonne:
A: NomeFile
B: NomeFoglio
C: RiferimentoCella
Il codice:
Public Sub mRicerca(ByVal vRicerca As Variant, sPath As String)
'dichiaro le variabili
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim wk As Workbook
Dim sh As Worksheet
Dim shMe As Worksheet
Dim lUltRiga As Long
Dim c As Range
'impedisco lo sfarfallio del monitor
With Application
.ScreenUpdating = False
End With
'metto un riferimento al Foglio1
'di questa cartella di Excel
Set shMe = ThisWorkbook.Worksheets("Foglio1")
'trovo l'ultima riga con dati
'della colonna A, Foglio1,
'di questa cartella di Excel
With shMe
lUltRiga = .Range( _
"A" & .Rows.Count _
).End(xlUp).Row
End With
'creo duo oggetti
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(sPath)
'ciclo i files della cartella
For Each objFile In objFolder.Files
'se sono files di Excel
Select Case LCase(Right(objFile.Name, 4))
Case ".xls", "xlsx", "xlsm"
'li apro
Set wk = Workbooks.Open(objFile.Path)
'ciclo i fogli
For Each sh In wk.Worksheets
'ciclo le celle dei fogli
For Each c In sh.UsedRange
'se il contenuto della cella
'corrisponde al valore cercato
If c.Value = vRicerca Then
'nuova riga in Foglio1 di questa
'cartella
lUltRiga = lUltRiga + 1
'recupero il nome del file
shMe.Range("A" & lUltRiga).Value = _
objFile.Name
'recupero il nome del foglio
shMe.Range("B" & lUltRiga).Value = _
sh.Name
'recupero l'indirizzo della cella
'(togliere False False se si vuole
'l'indirizzo tipo $A$1)
shMe.Range("C" & lUltRiga).Value = _
c.Address(False, False)
End If
Next
'chiudo il file
wk.Close
'Set a Nothing della variabile oggetto
Set wk = Nothing
Next
End Select
Next
'ripristino l'update del monitor
With Application
.ScreenUpdating = True
End With
'Set a Nothing delle variabili oggetto
Set c = Nothing
Set wk = Nothing
Set sh = Nothing
Set shMe = Nothing
Set objFile = Nothing
Set objFolder = Nothing
Set objFSO = Nothing
End Sub
Da richiamare cos�:
'richiamo la routine mRicerca
Public Sub m()
'cerco il valore 1 in tutti i fogli
'dei files presenti nella cartella
'C:\Cartella
Call mRicerca(1, "C:\Cartella")
End Sub
Come vedi mRicerca si aspetta due parametri.
Il primo � un Variant, quindi pu� essere
qualsiasi cosa: 1, "Mario", 1000, ecc.
Il secondo � uno String ed � la Path
della cartella in cui fare la ricerca
(nota, senza la \ finale).
Prova un po' e poi, gentilmente,
fai sapere se va bene. Grazie.
Qui puoi inoltre trovare(fra qualche minuto
dall'ora di invio di questa risposta) il file che ho
utilizzato per le prove:
http://www.maurogsc.eu/esemping/cercaneifiles.zip
Grazie per l'attenzione.
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.microsoft.com/Forums/it-IT/excelit/threads
> > come si può impostare una macro che cerchi un determinato dato (ad es.
> Da richiamare così:
>
> 'richiamo la routine mRicerca
> Public Sub m()
> 'cerco il valore 1 in tutti i fogli
> 'dei files presenti nella cartella
> 'C:\Cartella
> Call mRicerca(1, "C:\Cartella")
> End Sub
>
> Come vedi mRicerca si aspetta due parametri.
> Il primo è un Variant, quindi può essere
> qualsiasi cosa: 1, "Mario", 1000, ecc.
> Il secondo è uno String ed è la Path
> della cartella in cui fare la ricerca
> (nota, senza la \ finale).
>
> Prova un po' e poi, gentilmente,
> fai sapere se va bene. Grazie.
>
> Qui puoi inoltre trovare(fra qualche minuto
> dall'ora di invio di questa risposta) il file che ho
> utilizzato per le prove:
>
> http://www.maurogsc.eu/esemping/cercaneifiles.zip
>
> Grazie per l'attenzione.
>
> --
> ---------------------------
> Mauro Gamberini
> http://www.riolab.org/
> http://www.maurogsc.eu/
> http://social.microsoft.com/Forums/it-IT/excelit/threads
>
>
> .
>
ciao Mauro ...
aggiungo solo (non ho provata la tua ma così leggendola ...) che FSO (che
amo) cotempla:
Metodo FolderExists (GetFolder restituisce un errore nel caso la cartella
non esista)
Metodo GetExtensionName (per recuperare l'estensione del file)
... ma era più che altro l'occasione di salutarti.
ciao
r
--
Come e dove incollare il codice:
http://www.rondebruin.nl/code.htm
Il mio ultimo lavoro ...
http://excelvba.altervista.org/blog/index.php/Excel-VBA/UsedRange-eccezioni-e-alternative.html
E ciao a te, Roberto...;-)
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/
"Mauro Gamberini" <maurogsc...@RIMUOVEREaliceposta.it> ha scritto nel
messaggio news:%23ecphh6...@TK2MSFTNGP06.phx.gbl...
Certo, certo, ALT+F11.
La maledetta fretta!
Grazie a te per il riscontro e la giusta
correzione.
Buon lavoro.