我正在 MS Excel 中处理一个项目,其中有几个数据透视表,它们使用 Microsoft 文本驱动程序从制表符分隔的文本文件中读取数据,第一行中的列名(与 Excel 文件位于同一目录中)。我遇到了一个问题,当我将文本和 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