Cercare l'ultimo file in una cartella, e usarne il nome. - dal 04/09/04 pagina vista: volte E' possibile cercare ed ottenere anche un elenco completo dei nomi dei files presenti sull'hard-disk, all'interno anche di cartelle, e magari solo i file con una determinata estensione, ma quando si richieda di voler cercare l'ultimo file inserito in una cartella, ci troviamo costretti a decidere il criterio di ricerca. Si possono creare routine diverse, per ottenere il nostro risultato, e di norma, l'ultimo file che in genere si trova in una cartella viene ordinato da Windows in base al nome del file, da A a Z, indipendentemente dal tipo di file o di estensione. Una routine che cerchi in assoluto l'ultimo nome di file in una cartella potrebbe non servirci, restituendolo senza possibilità di decisione da parte nostra ciò che invece vorremmo. E' altrettanto vero che con un minimo di organizzazione, potremmo ottenere il risultato voluto: basterà infatti creare una cartella dove salvare un certo tipo di file, e nell'assegnare il nome, scegliere un numero progressivo, esempio: fatt001.xls, fatt002.xls, fatt003.xls, ecc. ecc.. Appare evidente che l'ultimo file presente in quella cartella, corrisponderà al nome con il numero più alto. Questo comporta però una maggior attenzione nell'assegnazione del nome, infatti fat18.xls, se fosse l'ultimo file salvato, non verrebbe comunque trovato come ultimo perchè in un elenco progressivo, fat18 viene prima di fatt001. Passiamo ad esaminare le routine. La prima si basa sull' oggetto FileSearch che sfruttando il metodo Execute consente di definire tramite il suo argomento SortBy il metodo di ricerca . Si possono all'uopo usare delle costanti MsoSortBy per definirne il metodo, ne cito alcune:
L'altro argomento di Execute è SortOrder che determina il relativo ordinamento, di default o non assegnato, e del tipo ascendente (da A a Z msoSortOrderAscending) altrimenti discendente (da Z ad A msoSortOrderDescending, o se preferite dal più grande al più piccolo, oppure dal maggiore al minore. Il metodo Execute serve per avviare la ricerca ed aggiornare l'oggetto FoundFiles, che restituirà tutti i file presenti nella cartella di ricerca, seguendo le impostazioni di SortBy, per cui nella routine sotto, poichè come esempio intendiamo trovare solo l'ultimo file Modificato e non tutti, inseriremo l'istruzione Exit For per uscire dal ciclo di ricerca appena trovato l'ultimo file modificato. E' necessario costruire un ciclo per la ricerca in quanto FoundFiles restituisce un numero di indice che rappresenta il percorso completo del file, ed il ciclo serve a scorrere comunque tutti i file presenti, anche se poi usciremo appena trovato il file ultimo modificato.( Attenzione. il file ultimo modificato è quello che porta la data più recente, cioè la più grande in termini di ordinamento, ed infatti useremo msoSortOrderDescending). Domanda: cosa facciamo con il file così trovato? Simuliamo di creare un collegamento a questo file usando il metodo Add dell'oggetto HyperLinks. E dove lo mettiamo questo collegamento? potremo usare un riferimento ad una precisa cella, oppure alla cella che decideremo di selezionare prima di lanciare la macro, e che quindi sarà la cella attiva. Questo ci consentirà di decidere di volta in volta dove inserire il collegamento al file cercato. E passiamo alle due routine. La prima:
Questa routine non è difficile da capire ed eventualmente modificare secondo le proprie esigenze. Vediamo ora un'altra routine, non mia, ma compilata da Giuliano Quattrini e-mail farmaciaginanneschi@virgilio.it che si basa su un ciclo che potrà servire anche per altre necessità, e sfrutta la funzione Dir seguita dal percorso completo che mira al file, in cui indicare le estensioni dei file che ci interessa verificare, e che restituisce, in questo esempio, solo il nome del file ultimo nella cartella scelta, senza il percorso completo. Per il Ciclo di ricerca ha usato Do Until ..Loop.
Un grazie a Giuliano per la routine inviata, e complimenti per la sua interpretazione. Buon lavoro. prelevato sul sito www.ennius.altervista.org |