使用Excelmacros更改数据透视表外部数据源path

我正在MS Excel中的一个项目中,我有几个数据透视表使用Microsoft Text Driver从第一行(与Excel文件位于同一目录中)的列名分隔的文本文件中读取数据。 我遇到了一个问题,当我将文本和Excel文件复制到一个新的目录,并尝试刷新数据说它无法find文本文件。 不幸的是,似乎没有办法告诉Excel我希望文本文件的path是相对的,而不是绝对的。 所有的数据透视表使用相同的数据连接,所以我认为编写一个macros来更新数据连接来引用正确的文本文件并且有一个链接到macros的button将不会太具有挑战性,文件path并为我刷新数据。

我对VBA不太熟悉,在线文档似乎很糟糕,所以我一直无法得到这个工作 – 我可以创build正确的文件path,可以刷新数据,但我没有能够找出如何更新连接以使用新的文件path,但保留其所有旧的导入/文件分析设置。 我也尝试录制一个macros,同时手动更新数据源,但由于某种原因,总是给我错误的中断logging,所以没有帮助。

以下是连接当前使用的连接string和命令文本,但没有关于如何parsing/导入数据(该文件是制表符分隔或在第一列有标题等),所以我不知道如何确保连接保持该数据。

连接string:

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 

如果有人知道如何编写一个macros来更新连接到文本文件的path,请分享一下代码,或者如果你知道如何build立一个相对的path,那也是很棒的。 任何帮助将不胜感激!

编辑:

我一直在搞这个,我可以改变连接string来使用新的path。 然而,当我去刷新数据透视表时,它将所有数据作为文本导入,而不是猜测它是否应该是数字等等(尽pipe它至less从文本文件的第一行获取列标题)。 任何想法如何告诉它猜测数据types(或只是保持旧的数据types)? 我现在使用的代码是:

 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 

我并不完全熟悉以这种方式创build数据透视表,但通常您可以通过查看QueryTable对象来获取数据透视表的信息,例如Connection。 看看这个例子:

 Option Explicit Public Sub UpdatePivotTableConnections() Dim ws As Excel.Worksheet Dim qt As Excel.QueryTable Dim fileName As String For Each ws In ThisWorkbook.Worksheets For Each qt In ws.QueryTables fileName = GetFileName(qt) MsgBox "The file name for PivotTable '" & qt.Name & "' is: " & fileName Next Next End Sub Public Function GetFileName(ByRef qt As QueryTable) As String Dim s() As String s = Split(qt.Connection, "\") GetFileName = s(UBound(s)) End Function 

这不是一个完整的答案,但是这是一个开始(我不喜欢发布不完整的答案,但它是向您展示代码示例的唯一方法)。查看您获得的信息,如果您可以从那里访问信息,请尝试查看QueryTable.Connectionstring,看看如何parsing它并将其replace为每个数据透视表。

好的,所以我做了工作,并认为我会分享。 我循环工作簿中的每个连接,并将其path更改为文本文件的新path(通过获取活动工作簿的path并附加文本文件的目录名称创build)。 另外,为了确保每次需要将包含导入信息的“schema.ini”文件(与文本文件位于同一目录中)一起导入文本文件,