Работя върху проект в MS Excel, където имам няколко обобщени таблици, които четат данни от текстов файл, разделен с табулатори, с имена на колони в първия ред (в същата директория като файла на Excel), използвайки текстовия драйвер на Microsoft. Сблъсках се с проблем, при който, когато копирам текстовите и Excel файловете в нова директория и се опитам да обновя данните, той казва, че не може да намери текстовите файлове. За съжаление изглежда няма начин да кажа на Excel, че искам пътищата до текстовите файлове да бъдат относителни, а не абсолютни. Всички осеви таблици използват една и съща връзка с данни, така че реших, че не би трябвало да е твърде предизвикателно да напиша макрос, който да актуализира връзката за данни, за да препраща към правилния текстов файл и да има бутон, свързан с макроса, който да актуализира файлови пътища и опресни данните за мен.
Не съм много запознат с VBA и онлайн документацията изглежда е доста лоша, така че не успях да накарам това да работи -- мога да създам правилния път на файла и да обновя данните, но не съм бил може да разбере как да актуализира връзката, за да използва новия файлов път, но да запази всичките си стари настройки за импортиране/разбор на файлове. Също така се опитах да запиша макрос, докато ръчно актуализирах източника на данни, но по някаква причина това винаги ми дава грешки, които прекъсват записа, така че това не помогна.
Следното е низът за свързване и текстът на командата, използвани в момента от връзката, но няма нищо за това как да се анализират/импортират данните (файлът е разделен с табулатори или има заглавки в първата колона и т.н.), така че не съм сигурен как да се уверите, че връзката запазва тези данни.
Низ за връзка:
DefaultDir=C:/directoryPath;Driver={Microsoft Text Driver (*.txt; *.csv)};
DriverId=27;FIL=text;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;
SafeTransactions=0;Threads=3;UserCommitSync=Yes;
Текст на командата:
SELECT *
FROM tableName.txt tableName
Ако някой знае как да напише макрос, който ще актуализира пътя във връзката към текстовия файл, моля, споделете кода или ако знаете как просто да направите пътя относителен, това също би било чудесно. Всяка помощ ще бъде високо оценена!
РЕДАКТИРАНЕ:
Бърках си с него още малко и успях да променя низовете за свързване, за да използвам новия път. Въпреки това, когато отида да обновя обобщената таблица, тя импортира всички данни като текст, вместо да познае дали трябва да бъде числова и т.н. (въпреки че получава заглавките на колоните поне от първия ред на текстовия файл). Някакви идеи как да му кажа да отгатва типовете данни (или просто да запази старите типове данни)? Кодът, който използвам в момента е:
Public Sub Test()
Dim wb As Excel.Workbook
Dim pc As PivotCache
Dim path As String
Set wb = ActiveWorkbook
path = wb.path
For Each pc In wb.PivotCaches
'Debug.Print pc.Connection
pc.Connection = "ODBC;DBQ=" & path & ";DefaultDir=" & path & ";Driver={Microsoft Text Driver (*.txt; *.csv)};DriverId=27;FIL=text;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UserCommitSync=Yes"
Next
End Sub
MsgBox (ThisWorkbook.Path)
трябва да помогне - person enderland   schedule 25.08.2012