Свързаните таблици могат да бъдат фантастично полезни (макар и не през цялото време, разбира се) - особено когато имате работа с външна информация, която редовно се променя. Типичен пример може да бъде, когато доставчикът ви дава достъп до текущия си месечен файл с цените. Но какво се случва, когато издадат файла следващия месец и името на файла се промени от „Ценова листа-01-01-2016” на „Ценова листа-01-02-2016”? Първото нещо, което ще се случи, е връзката ви да се счупи, така че ще трябва да я актуализирате ръчно. Всеки път, когато променят името на файла. Това важи и за имената на таблици (разбира се!). Има ли начин да направите това бързо и лесно, питате вие? Радваме се, че попитахте - прочетете и разберете как ...
Определяне на сцената - сценарият
В тази статия ще използвам измислен сценарий - но такъв, който съм сигурен, че бързо ще разпознаете!
Всеки месец търговията с Acme ни изпраща актуализиран ценоразпис за всички консумативи, използвани в DataNumen. За да знаем колко ще харчим за неподвижни всеки месец, ние свързваме този файл в нашата база данни за управление на офиса.
Проблемът е, че въпреки че форматът на файла остава същият, името на файла се променя всеки месец. Миналия месец беше „стационарно costs януари 2017.xls ”, този месец е„ стационарен costs февруари 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
Обяснение на кода
Както можете да видите, ние предаваме (свързаното) име на таблица, заедно с името на новия файл, към който трябва да бъде свързана таблицата. Името на файла трябва да включва пълния път към файла. Една потенциална област, с която може да се борите в start получава правилния формат за низа на свързване, който да се постави в променливата “newConnect”. Въпреки че има много източници за откриване на правилния формат, един от най-лесните, които открих, е просто да разгледам низа на свързване на текущата свързана таблица. За да направите това, просто добавете следния ред точно под реда „Задайте objTableDef = objDB.TableDefs (tableName)“:
Debug.Print (objTableDef.Connect)
Това ще отпечата съществуващия низ за свързване в прозореца за отстраняване на грешки / непосредствения редактор на кода (ако това вече не се вижда, натиснете CTRL-G от екрана на редактора на кода на VBA, за да превключите видимостта на прозореца Незабавно преди стартиране на кода.
Предупреждение
Както винаги, не забравяйте, че докато кодовият фрагмент по-горе може да ви помогне да спестите време, когато трябва да промените файла, към който е свързана таблица, това, което не може да направи, е да ви помогне, ако срещнете Достъп до повредени файлове, така че не забравяйте да поддържате резервни копия и да знаете къде да се обърнете, ако всичко друго се провали.
Въведение на автора:
Мичъл Понд е експерт по възстановяване на данни в DataNumen, Inc., която е световен лидер в технологиите за възстановяване на данни, включително отстраняване на SQL повреда и excel софтуерни продукти за възстановяване. За повече информация посетете WWW.datanumen.com