Rintracciare il File di un collegamento Fonte Dati esterna ad Excel. - dal 04/09/04 pagina vista: volte Ho letto in un Forum, una domanda di cui riporto una sintesi : " per una cartella di Excel in cui esiste una tabella formata da dati provenienti da un database Access ( file .mdb ), come fare se si cambia posto al database ? Infatti Excel memorizza il percorso che mira al database, e cambiandogli collocazione, Excel non trova più il file e non può fare gli aggiornamenti." Premesso che non mi occupo di Access, il problema riguarda Excel e come tale propongo una soluzione, può darsi che interessi anche qualche lettore di questo sito. Quando in Excel si usa fare importazione di dati esterni (o dal menù Dati/Importa dati esterni/Importa dati..seguendo poi le istruzioni che chiedono dove si trova la fonte dati (quindi il percorso che mira alla fonte dati, che potrà anche essere un file .mdb cioè un database realizzato in Access, e quindi ad una tabella contenuta nel database stesso), o predisponendo istruzioni vba per ottenere lo stesso scopo), viene memorizzata una query che serve ad Excel per trovare, alle successive aperture della cartella, la fonte dati che alimenta la tabella su Excel, per poter effettuare aggiornamenti alla tabella stessa. Sia nella query che nelle eventuali istruzioni in vba (o macro che dir si voglia) viene memorizzato il nome del file fonte dei dati, completo del percorso, cioè il nome dell'hard-disk e della cartella e/o sotto cartelle dove si trova il file fonte dati. Tanto per capirci, supponendo che la fonte dati si chiami "Mioesempiodb.mdb" il percorso che mira a questo file potrebbe essere : "C:\Documents and Settings\Nomeutente\Documenti\Mioesempiodb.mdb". Se noi spostiamo il file .mdb mettendolo in una ipotetica cartella "C:\MieiDati\", quando apriremo la cartella di Excel che contiene il collegamento a Mioesempiodb.mdb il file non verrà più trovato e i dati non potranno essere aggiornati. L'esercizio che vedremo si avvale della proprierà FileSearch dell'oggetto Application, che serve, dato un percorso ed il tipo di file da cercare, a reperire il file cercato ottenendo in restituzione il percorso completo dove si trova il file. Affideremo questo percorso ad una variabile. Supponendo quindi che la gestione del collegamento la si effettui tramite una macro, forniremo alle istruzioni la variabile (ottenuta con FileSearch) come sostitutivo del percorso al file.mdb che è necessario dichiarare. Associeremo la macro ad un pulsante, e quando avremo bisogno di aggiornare o reintegrare i dati, agiremo sul pulsante. Nella macro avremo inserito come inizio istruzioni, quelle relative al FileSearch, e tutte le volte verrà prima cercato il file.mdb, e se questo sarà stato spostato, verrà comunque trovato. Mi sembra una soluzione accettabile, che ne dite? Esiste tuttavia una possibilità, che del file che cerchiamo ne esistano più di uno, magari perchè ne avremo creata una copia mettendola in un'altra cartella; FileSearch esegue la ricerca di tutti i file che si chiamano col nome cercato, e troverebbe quindi tutte e due, (o più) file con lo stesso nome, anche se in cartelle diverse; a questo punto quale è il giusto file? per evitare problemi creeremo una condizione che verifichi SE del file cercato ne esiste uno solo, e passeremo questo nome col suo percorso alla variabile, altrimenti per ogni file con lo stesso nome, porremo una domanda se il file col relativo percorso sarà quello voluto, e quando confermeremo, quello sarà il nome/percorso assegnato alla variabile. Aggiungiamo anche un controllo che ci faccia uscire dalla routine se, nel caso di più file, NON avremo comunque scelto nessuno dei file/percorso trovati; questo per impedire la prosecuzione delle istruzioni del collegamento, che trovando la variabile vuota, genererebbe un errore di run-time. Vediamo quindi il blocco di istruzioni relativo al FileSearch, e dopo una routine completa di collegamento.
Ora vediamo la routine completa delle istruzioni per il collegamento alla fonte dati, soprattutto per vedere come legare la variabile X alle due istruzioni che identificano il file fonte dati. Tenete presente che la ricerca del o dei files, può richiedere un pò di tempo; dipenderà (il tempo) dalla quantità di files presenti sull'hard-disk, oltre che dal numero di cartelle e sottocartelle. Non scordiamo che FileSearch dovrà "spulciare" tutto l'hard-disk. Per farvi un esempio, su un computer Pentium4 2400, facendo contare tutti i file presenti (*.*) indipendentemente dall'estensione, per cercare e contare 61154 files sono occorsi 4 minuti e 47 secondi. Mentre per cercare e contare tutti i file .mdb sono occorsi 8 secondi per un totale di 277 files. Quindi non sono tempi impossibili specialmente se il numero di files .mdb sarà più limitato. Se volete divertirvi a controllare il vostro computer, copiatevi queste istruzioni e inseritele in un modulo di una cartella excel, lanciando poi la macro.
Ognuno di voi potrà, attivando il "registratore di macro", registrare i vari passaggi per l'importazione dati esterni, ottimizzando in proprio la parte "collegamento" della routine sopra. Poi potrà avvalersi della prima parte con FileSearch per adattare il tutto alle proprie esigenze. L'importante era mettere in evidenza una routine che consentisse di trovare un file ovunque sia. Buon lavoro. prelevato sul sito www.ennius.altervista.org |