Ecco la mia proposta.
1) Nel file RIEPILOGO.xls, in una colonna, inserisci i nomi di tutti i files presenti nella tua cartella; questo sara’ fatto inizialmente tramite una macro di inventario, poi puo’ essere aggiornato a mano (se i file nuovi sono pochi e controllati) o puo’ essere aggiornato tramite un nuovo ciclo di inventario.
2) Nelle celle A1-B1-C1-D1 inserisci i nomi assegnati alle celle che vuoi importare; invece di A1:A4 puoi usare altre colonne contigue (es D1:G1), oppure le colonne possono essere in numero diverso da 4.
3) Una seconda macro popola le celle con le formule di collegamento ai file e ai range elencati.
Per questo userai il seguente codice:
- Codice: Seleziona tutto
Sub Inventa()
'
StartFile = "N3" '<<<< Cella da cui si popola l' inventario
'
Range(StartFile).Range("A1:A65000").ClearContents 'Azzera l’ elenco dei file
'
SourceDir = "C:\Documents and Settings\XXX\Desktop\Pratiche\" '<<<< Aggiustare
Set fs = Application.FileSearch
With fs
.LookIn = SourceDir
.SearchSubFolders = False
.Filename = "*.xls"
If .Execute() = 0 Then
MsgBox "Zero files in " & SourceDir
Exit Sub
End If
End With
'Trovati file:
With fs
MsgBox "Ci sono " & .FoundFiles.Count & " file(s) found." '1
For i = 1 To .FoundFiles.Count
NomeFile = .FoundFiles(i)
Range(StartFile).Offset(i - 1, 0).Value = NomeFile
'MsgBox NomeFile
Next i
End With
End Sub
- Codice: Seleziona tutto
Sub Collega()
'
' DEFINIZIONI <<<< Variare come da situazione
StartFile = "N3" 'Prima Cella con Nome file da collegare; vedi macro INVENTARIO
NFoglio = "Foglio1" 'Foglio da cui estrarre le info
Compil = "A1:C1" 'Celle con il range da importare
'
'
FileR = Range(StartFile).Row
FileC = Range(StartFile).Column
NCols = Range(Compil).Columns.Count
Set AreaFile = Intersect(Range(StartFile, Cells(FileR + 65000, FileC)), ActiveSheet.UsedRange)
stacol = Range(Compil).Range("A1").Column
AreaFile.Select
For Each NFile In AreaFile
If NFile = "" Then GoTo Esci
CuRiga = NFile.Row
CuFILE = Mid(NFile, InStrRev(NFile, "\", -1, vbTextCompare) + 1, 99)
CuDIR = Replace(NFile, CuFILE, "")
For J = 0 To NCols - 1
Colleg = Chr(39) & CuDIR & "[" & CuFILE & "]" & NFoglio & Chr(39) & "!" & Range(Compil).Range("A1").Offset(0, J).Value
Cells(CuRiga, stacol + J).Select
'MsgBox (Colleg)
ActiveCell.Formula = "=" & Colleg
Next J
Next NFile
Esci:
Range(Cells(Selection.Row + 1, stacol), Cells(65000 - Selection.Row, stacol + NCols - 1)).ClearContents
End Sub
Procedura:
-Da Excel apri il vba editor con Alt-F11
-Menu /Inserisci /Modulo
-Copia il codice e incollalo nel frame bianco di dx del vba editor
-eventualmente assegna le macro a due pulsanti o a due tasti di scelta rapida
“Inventa” esegue l’ inventario e “Collega” inserisce le formule di collegamento.
Dai uno sguardo alle istruzioni marcate <<<<, perche’ vanno adattate:
StartFile = "N3" Ho ipotizzato che l’ inventario si faccia in colonna N da riga 3 (sia su Inventa che su Collega)
NFoglio = "Foglio1" Qui inserisci uno qualsiasi dei fogli presenti sui file da cui attingi
Compil = "A1:C1" Qui definisci su quali celle contigue di riga 1 sono compilate con i nome delle celle da cui prelevare i dati; le formule che importeranno i relativi valori saranno messe in queste colonne da riga 3 (se StartFile = “XX3”) in giu’, fintanto che non si trova un vuoto sull’ elenco dei file.
Uso:
Personalizzare le macro con i parametri detti prima
Inserisci su riga 1 i nomi dei range da cui leggere i dati
Eseguire la macro Inventa, che mettera’ l’ elenco dei file nella colonna prescelta
Eseguire la macro Collega, che riempira’ le celle con i collegamenti necessari.
La riga 2 l’ ho lasciata libera pensando che potesse essere usata per inserire eventuali intestazioni.
Se vuoi avere in qualche colonna il solo NOME del file, puoi fare così:
-in una cella, es N1, scrivi la directory (nome della cartella; nel tuo caso C:\Documents and Settings\XXX\Desktop\Pratiche\)
-nella cella prescelta scrivi la formula
- Codice: Seleziona tutto
=SOSTITUISCI(N3;$N$1;"")
(se l’ inventario e’ formato da N3 in giu’)
-poi copi questa formula nelle celle sottostanti, quanto basta.
Infine, prima di salvare il file:
-Menu /Modifica /Collegamenti
-premi Prompt di avvio e setta l’ opzione che preferisci.
Prova quanto suggerito, e fai sapere!
Ciao.