Creare elenco di files di cartelle del PC
e aggiungerli all'Hyperlink. (per poterli aprire dall'elenco stesso)
Da
usare soprattutto con le versione di excel dalla 2007 compresa e
successive, versioni che non "conoscono" l'oggetto
FileSearch impiegato in diverse routine di articoli sul sito.
E' vero che esiste anche l'articolo
Cercare e Selezionare una Cartella (Folder o Directory)
(vedi)
che serve anche per crearsi un elenco dei files contenuti in una
determinata cartella, e che i lettori attenti avranno saputo modificare
i vari articoli sul tema "elencofile-hiperlink" per adattarli alle nuove
versioni di Excel, ma visto che esistono incertezze (???) di alcuni lettoti
su come procedere, presento qui due routine che possono risolvere il tema.
Sub CaricaNomiFile()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
'con fd apriamo la finestra per la selezione della cartella che
ci interessa
Dim CartellaSelezionata As Variant
With fd
If .Show = -1 Then
For Each CartellaSelezionata In .SelectedItems
miacartella = CartellaSelezionata
Next
End If
End With
folderspec = miacartella
Dim fs, f, Nomefile, Cartella
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(folderspec)
Set Cartella = f.Files
'sotto: si inizia il ciclo che per ogni file (Nomefile) presente
in Cartella
For Each Nomefile In Cartella
'sotto:
controlliamo l'estensione dei file: se corrispondono
all'estensione cercata, ne carichiamo il percorso completo in
una cella del 'foglio attivo
If Right(Nomefile, 3) = "xls" Then
Dim iRow, icol As Integer
iRow = 5
icol = 1
While Cells(iRow, icol).Value <> ""
iRow = iRow + 1
Wend
Cells(iRow, icol) = miacartella & "\" & Nomefile.Name
End If
Next
Iperlink 'ora
chiamiamo la routine per aggiungere il collegamento hyperlink ai
nomi su scritti
Set fs = Nothing
Set Cartella = Nothing
Set f = Nothing
Set fd = Nothing
End Sub
'e questa la seconda
routine che scorre l'elenco realizzato con la routine
precedente, e se il file scorso nel ciclo corrisponde come
'estensione al voluto, gli aggiungiamo l'iperlink; ho diviso
queste istruzioni solo per rendere più comprensibili le due
operazioni, ma 'basta modificare la routin sopra come mostrato
nella parte "Modifica"
Sub Iperlink()
tr = Range("A65536").End(xlUp).Row
For N = 5 To tr
If Right(Cells(N, 1), 3) = "xls" Then
Q = Cells(N, 1).Value
W = Cells(N, 1).Value
ActiveSheet.Cells(N, 1).Hyperlinks.Add
Anchor:=ActiveSheet.Cells(N, 1), Address:=Q, TextToDisplay:=W
End If
Next
End Sub
Modifica : (le due routine
sono state integrate)
Sub CaricaNomiFile2()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
Dim CartellaSelezionata As Variant
With fd
If .Show = -1 Then
For Each CartellaSelezionata In .SelectedItems
folderspec = CartellaSelezionata
Next
End If
End With
Dim fs, f, Nomefile, Cartella
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(folderspec)
Set Cartella = f.Files
For Each Nomefile In Cartella
If Right(Nomefile, 3) = "xls" Then
Dim iRow, icol As Integer
iRow = 5
icol = 1
While Cells(iRow, icol).Value <> ""
iRow = iRow + 1
Wend
Cells(iRow, icol) = miacartella & "\" & Nomefile.Name
Q = Cells(iRow, icol).Value
W = Cells(iRow, icol).Value
ActiveSheet.Cells(iRow, icol).Hyperlinks.Add
Anchor:=ActiveSheet.Cells(iRow, icol), Address:=Q,
TextToDisplay:=W
End If
Next
Set fs = Nothing
Set Cartella = Nothing
Set f = Nothing
Set fd = Nothing
End Sub |
Cosa c'à da dire:
1) ho impostato le istruzioni per lavorare con file xls
(if
Right(Nomefile, 3) = "xls") basta modificare l'estensione con l'estensione
che ci pare purchè con estensione a tre lettere, altrimenti, per i nuovi
file Office a 4 lettere di estensione occorre anche modificare l'istruzione
if Right(Nomefile, 4) = "xlsm"). Meglio ovviamente predisporre un
automatismo per selezionare una determinata estensione affidandola ad una
variabile da usare per il confronto dei file ed assegnare detta variabile al
controllo con l'istruzione Right, naturalmente variando la lunghezza da
usare come secondo elemento della funzione, quindi per esempio, se useremo
una combobox dove leggere le estensioni previste, potremmo avere:
Dim este as string
este = ComboBox1.Text 'combobox dove
avremo caricato con Additem tutte le estenzioni che vorremo
if este = "" then exit sub
lunga = Len(este)
if Right(Nomefile, lunga) = este Then
2) Nelle istruzioni ho omesso di indicare il nome del foglio
su cui lavorare, assumendo il foglio come il foglio attivo, ma sarebbe
opportuno indicare sempre anche il nome del foglio, es.
While Sheets("FoglioTuo").Cells(iRow,
icol).Value <> "" ecc.
3) ho istruito come riga iniziale in cui incollare la
riga 5 del foglio attivo e come colonna la colonna A (la 1) ma ognuno
destinerà gli intervalli dove gli aggraderà, modificando i valori nelle
istruzioni.
Spero tanto che un certo sig. Giuseppe si decida ad
applicarsi di più.
buon lavoro a
tutti.
prelevato sul sito
www.ennius.altervista.org
|