Linkitetyt taulukot voivat olla fantastisesti hyödyllisiä (vaikkakaan ei tietenkään koko ajan) - varsinkin kun käsittelet ulkoista tietoa, joka muuttuu säännöllisesti. Tyypillinen esimerkki voi olla, kun toimittaja antaa sinulle pääsyn nykyiseen kuukausihintatiedostoonsa. Mutta mitä tapahtuu, kun he julkaisevat tiedoston ensi kuussa, ja tiedostonimi muuttuu "Hinnasto-01-01-2016": sta "Hinnasto-01-02-2016"? Ensimmäinen asia, joka tapahtuu, on linkki, joka rikkoo, joten sinun on päivitettävä se manuaalisesti. Joka kerta, kun he muuttavat tiedostonimeä. Tämä pätee myös taulukoiden nimiin (tietysti!). Onko mahdollista tehdä tämä nopeasti ja helposti, kun kysyt? Olemme iloisia, että kysyit - lue lisää ja selvitä, miten…
Kohtauksen asettaminen - skenaario
Tässä artikkelissa aion käyttää kuvitteellista skenaariota - mutta tunnen varmasti, että tunnistat sen nopeasti!
Joka kuukausi Acme trading lähettää meille päivitetyn hinnaston kaikista tarvikkeista, joita käytetään DataNumen. Linkitämme tähän tiedostoon toimistohallintatietokannassamme, jotta tiedämme kuinka paljon kulutamme paikallisiin palveluihin kuukaudessa.
Ongelmana on, että vaikka tiedoston muoto pysyy samana, tiedostonimi muuttuu joka kuukausi. Viime kuussa se oli ”kiinteistökustannukset tammikuu 2017.xls”, tässä kuussa se on ”kiinteistökustannukset helmikuu 2017.xls”.
Ei paljon muutosta, olen varma, että olet samaa mieltä, mutta ellemme koe ongelmia nimetä tiedosto uudelleen manuaalisesti (kun olemme siirtäneet vanhan tiedoston pois tieltä tai poistaneet sen) tai käymme läpi linkitä taulukko uudelleen linkitetyn taulukon hallinnan kautta Accessissa.
Koska emme halunneet tehdä tätä, loimme seuraavan koodin tekemään sen sijaan - paljon helpompaa, koska olen varma, että näet:
Public Sub UpdateLink (tableName As String, newFileName As String) Dim objDB As Database Dim objTableDef As TableDef Dim newConnect as String Set objDB = CurrentDb Set objTableDef = objDB.TableDefs(tableName) 'format of the connection string in our case, for example, is: ' Excel 5.0;HDR=YES;IMEX=2;DATABASE=File name including path and extension type newConnect = "Excel 5.0;HDR=YES;IMEX=2;DATABASE=" & newFileName objTableDef.Connect = newConnect objTableDef.RefreshLink Set objTableDef = Nothing Set objDB = Nothing End Sub
Koodin selittäminen
Kuten näet, välitämme (linkitetyn) taulukon nimen sekä sen uuden tiedoston nimen, johon taulukko tulisi linkittää. Tiedostonimen tulisi sisältää tiedoston koko polku. Yksi mahdollinen aluksi vaikeaselkoinen asia on oikean muodon löytäminen yhteysmerkkijonolle, joka sijoitetaan "newConnect"-muuttujaan. Vaikka oikean muodon selvittämiseen on paljon lähteitä, yksi helpoimmista tavoista, joita olen löytänyt, on yksinkertaisesti tarkastella nykyisen linkitetyn taulukon yhteysmerkkijonoa. Voit tehdä tämän lisäämällä seuraavan rivin suoraan "Set objTableDef = objDB.TableDefs(tableName)" -rivin alapuolelle:
Debug.Print (objTableDef.Connect)
Se tulostaa nykyisen yhteysmerkkijonon koodieditorin virheenkorjaus- / välittömään ikkunaan (jos se ei vielä ole näkyvissä, paina CTRL-G VBA-koodieditorin näytössä vaihtaaksesi Välitön-ikkunan näkyvyyden ennen koodin suorittamista.
Varoitus
Kuten aina, älä unohda, että vaikka yllä oleva koodinpätkä voi auttaa sinua säästämään aikaa, kun sinun on vaihdettava tiedosto, johon taulukko on linkitetty, se ei voi auttaa sinua, jos kohtaat jotain Käytä tiedostovaurioita, joten varmista, että pidät varmuuskopiot ja tiedät minne kääntyä, jos kaikki muu epäonnistuu.
Tekijän esittely:
Mitchell Pond on tietojen palauttamisen asiantuntija DataNumen, Inc., joka on maailman johtava tietojen palautustekniikoissa, mukaan lukien korjata SQL-vauriot ja Excel-palautusohjelmistotuotteet. Lisätietoja osoitteessa www.datanumen.com