我正在处理MS Excel中的一个项目,其中有几个数据透视表从第一行中的列名称中读取制表符分隔的文本文件中的数据目录作为Excel文件)使用Microsoft Text Driver。我遇到了一个问题,当我将文本和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
'MsgBox(ThisWorkbook.Path)'should help – enderland
@enderland这有什么用? – scaevity
我认为@enderland想说的是,当你使用Thisworkbook.Path时,它会给你它所在的完整目录名称(我认为对于服务器而言,它会给你一个映射的驱动器名称而不是满的UNC路径)。你不能拿这个加上文件名来得到你的新的DefaultDir变量。为了访问这个变量,我建议记录一个宏并再次执行与文本文件的连接,以便看到Excel如何访问它。 –