Kuidas lingitud tabelit kiiresti värskendada, kui välist failinime muudetakse

Lingitud tabelid võivad olla fantastiliselt kasulikud (kuigi mitte kogu aeg) – eriti siis, kui tegelete regulaarselt muutuva välisteabega. Tüüpiline näide võib olla see, kui tarnija annab teile juurdepääsu oma praegusele igakuisele hinnafailile. Mis saab aga siis, kui nad väljastavad faili järgmisel kuul ja faili nimi „Hinnakiri-01-01-2016” muutub nimeks „Hinnakiri-01-02-2016”? Esimene asi, mis juhtub, on see, et teie link katkeb, nii et peate seda käsitsi värskendama. Iga kord, kui nad failinime muudavad. See kehtib ka tabelinimede kohta (muidugi!). Kas on võimalik seda kiiresti ja lihtsalt teha, küsite? Meil on hea meel, et küsisite – loe edasi ja saa teada, kuidas…

Stseeni seadmine – stsenaarium

Lingitud tabelihaldurSelles artiklis kasutan väljamõeldud stsenaariumi, kuid kindlasti tunnete selle kiiresti ära!

Acme kauplemine saadab meile iga kuu uuendatud hinnakirja kõigi kasutatavate tarbekaupade kohta DataNumen. Et teaksime, kui palju kulutame iga kuu statsionaarsetele asjadele, lingime selle failiga oma kontorihalduse andmebaasis.

Muutke failinimeProbleem on selles, et kuigi faili vorming jääb samaks, muutub failinimi iga kuu. Eelmisel kuul oli see „kantseleikulud jaanuar 2017.xls”, sel kuul aga „kantseleikulud veebruar 2017.xls”.

Olen kindel, et nõustute sellega, et see ei ole palju muutunud, kuid kui me ei tee raskusi faili käsitsi ümbernimetamisega (kui oleme vana faili teelt teisaldanud või selle kustutanud) või läbime tabeli uuesti linkimine Accessis lingitud tabelihalduri kaudu.

Kuna me ei tahtnud seda teha, lõime selle asemel järgmise koodi – palju lihtsam, nagu kindlasti näete:

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

Koodi selgitamine

Nagu näete, edastame (lingitud) tabeli nime koos uue faili nimega, millega tabel peaks olema lingitud. Failinimi peaks sisaldama faili täielikku teed. Üks potentsiaalne valdkond, millega teil alguses raskusi võib olla, on ühendusstringi õige vormingu leidmine muutujasse „newConnect“. Kuigi õige vormingu leidmiseks on palju allikaid, on üks lihtsamaid, mille olen leidnud, lihtsalt vaadata praeguse lingitud tabeli ühendusstringi. Selleks lisage lihtsalt järgmine rida otse rea „Set objTableDef = objDB.TableDefs(tableName)“ alla:

Debug.Print (objTableDef.Connect)

See prindib olemasoleva ühenduse stringi välja koodiredaktori silumis-/vahetu aknasse (kui see pole veel nähtav, vajutage VBA koodiredaktori ekraanil klahvikombinatsiooni CTRL-G, et lülitada enne koodi käivitamist vahetu akna nähtavus sisse.

Hoiatus

Nagu alati, ärge unustage, et kuigi ülaltoodud koodilõik aitab teil säästa aega, kui peate muutma faili, millega tabel on lingitud, ei saa see teid aidata, kui teil tekib Juurdepääsu faili kahjustus, seega tehke kindlasti varukoopiaid ja teadke, kuhu pöörduda, kui muu ebaõnnestub.

Autori sissejuhatus:

Mitchell Pond on andmete taastamise ekspert DataNumen, Inc., mis on maailmas juhtiv andmete taastamise tehnoloogiate, sealhulgas SQL-i kahjustuste parandamine ja Exceli taastamise tarkvaratooted. Lisateabe saamiseks külastage www.datanumenCom

Kommentaarid on suletud.