დაკავშირებული ცხრილები შეიძლება იყოს ფანტასტიკურად სასარგებლო (თუმცა, რა თქმა უნდა, არა ყოველთვის) – განსაკუთრებით მაშინ, როდესაც საქმე გაქვთ გარე ინფორმაციასთან, რომელიც რეგულარულად იცვლება. ტიპიური მაგალითი შეიძლება იყოს, როდესაც მომწოდებელი გაძლევთ წვდომას მათი მიმდინარე თვიური ფასის ფაილზე. მაგრამ რა მოხდება, როდესაც ისინი გასცემენ ფაილს შემდეგ თვეში და ფაილის სახელი იცვლება „Pricelist-01-01-2016“-დან „Pricelist-01-02-2016“-ზე? პირველი, რაც მოხდება, არის თქვენი ბმული გაფუჭდება, ასე რომ თქვენ მოგიწევთ მისი ხელით განახლება. ყოველ ჯერზე, როდესაც ისინი ცვლიან ფაილის სახელს. ეს ეხება ცხრილის სახელებსაც (რა თქმა უნდა!). არის თუ არა ამის გაკეთება სწრაფად და მარტივად, გეკითხებით? მოხარული ვართ, რომ გკითხეთ - წაიკითხეთ და გაიგეთ, თუ როგორ…
სცენის დაყენება - სცენარი
ამ სტატიაში მე ვაპირებ გამოგონილი სცენარის გამოყენებას – მაგრამ დარწმუნებული ვარ, რომ თქვენ სწრაფად ამოიცნობთ!
ყოველთვიურად, Acme Trading გამოგვიგზავნეთ განახლებული ფასების სია ყველა სახარჯო მასალისთვის, რომელიც გამოიყენება DataNumen. იმისათვის, რომ ვიცოდეთ, რამდენს დავხარჯავთ სტაციონარული ნივთებისთვის ყოველთვიურად, ამ ფაილს ვუკავშირდებით ჩვენი ოფისის მართვის მონაცემთა ბაზაში.
პრობლემა ის არის, რომ მიუხედავად იმისა, რომ ფაილის ფორმატი იგივე რჩება, ფაილის სახელი ყოველთვიურად იცვლება. გასულ თვეში ეს იყო „საკანცელარიო ნივთების ხარჯები 2017 წლის იანვარი.xls“, ამ თვეში კი „საკანცელარიო ნივთების ხარჯები 2017 წლის თებერვალი.xls“.
ბევრი ცვლილება არ არის, დარწმუნებული ვარ, დამეთანხმებით, მაგრამ თუ არ გადავიტანთ ფაილის ხელით სახელის გადარქმევის პრობლემას (როდესაც ძველი ფაილი გზიდან გადავიტანეთ ან წავშალეთ), ან არ გავიაროთ პროცესი ცხრილის ხელახლა დაკავშირება Access-ში დაკავშირებული ცხრილის მენეჯერის მეშვეობით.
იმის გამო, რომ ჩვენ არ გვინდოდა ამის გაკეთება, ამის ნაცვლად შევქმენით შემდეგი კოდი – ბევრად უფრო ადვილია, როგორც დარწმუნებული ვარ, ნახავთ:
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
კოდის ახსნა
როგორც ხედავთ, ჩვენ გადავცემთ (დაკავშირებულ) ცხრილის სახელს იმ ახალი ფაილის სახელთან ერთად, რომელთანაც ცხრილი უნდა იყოს დაკავშირებული. ფაილის სახელი უნდა შეიცავდეს ფაილის სრულ გზას. ერთ-ერთი პოტენციური საკითხი, რომელიც შეიძლება თავიდანვე გაგიჭირდეთ, არის კავშირის სტრიქონის სწორი ფორმატის პოვნა „newConnect“ ცვლადში განსათავსებლად. მიუხედავად იმისა, რომ სწორი ფორმატის გასარკვევად უამრავი წყარო არსებობს, ერთ-ერთი ყველაზე მარტივი, რაც მე ვიპოვე, არის მიმდინარე დაკავშირებული ცხრილის კავშირის სტრიქონის უბრალოდ დათვალიერება. ამისათვის უბრალოდ დაამატეთ შემდეგი ხაზი პირდაპირ „Set objTableDef = objDB.TableDefs(tableName)“ ხაზის ქვეშ:
Debug.Print (objTableDef.Connect)
ეს დაბეჭდავს არსებული კავშირის სტრიქონს კოდის რედაქტორის გამართვის/დაუყოვნებლივ ფანჯარაში (თუ ეს უკვე არ ჩანს, დააჭირეთ CTRL-G VBA კოდების რედაქტორის ეკრანიდან, რათა გადართოთ უშუალოდ ფანჯრის ხილვადობა კოდის გაშვებამდე.
Გაფრთხილება
როგორც ყოველთვის, არ უნდა დაგვავიწყდეს, რომ მიუხედავად იმისა, რომ ზემოთ მოცემული კოდის ფრაგმენტი დაგეხმარებათ დაზოგოთ დრო, როდესაც გჭირდებათ ფაილის შეცვლა, რომლითაც ცხრილი არის მიბმული, ის, რისი გაკეთებაც მას არ შეუძლია, არის დაგეხმაროთ, თუ რაიმეს წააწყდებით. ფაილის დაზიანებაზე წვდომა, ასე რომ, დარწმუნდით, რომ შეინახეთ სარეზერვო ასლები და იცოდეთ სად მიმართოთ, თუ ყველაფერი ვერ ხერხდება.
ავტორი შესავალი:
მიტჩელ პონდი არის მონაცემთა აღდგენის ექსპერტი DataNumen, Inc., რომელიც მსოფლიო ლიდერია მონაცემთა აღდგენის ტექნოლოგიებში, მათ შორის SQL დაზიანების შეკეთება და Excel-ის აღდგენის პროგრამული პროდუქტები. დამატებითი ინფორმაციისთვის ეწვიეთ www.datanumen. ერთად