Excel 2010:如何更改数据透视表源数据而不断开切片机?

我已经研究过这个疯子了,我担心没有答案。 但也许这个网站上真正聪明的人可以帮助。

我有两个工作簿一起工作 – Charts.xlsm和Data.xlsm。 他们总是在一起放在同一个文件夹中。 Charts.xlsm显然包含了我所有的图表,但是它们都链接到Data.xlsm中的表格作为源代码。 我的Charts.xlsm中还有很多连接到图表的切片器,当它们连接到具有相同数据源的图表时,它们共享caching。 两个工作簿总是同时打开,以便数据源引用如下所示:“Data.xlsm”!Table1

这一切都很好,直到我把这些工作簿放在另一台计算机上(这就是为什么我这样做,所以我需要找出如何解决这个问题)。

工作簿closures后,源数据引用将更改为硬盘上的特定位置:“C:\ Folder \ Data.xlsm”!Table1

如果我想手动将其更改回本地引用,则必须先切换并断开每个切片器,刷新表格,然后重新连接每个切片器。 不是我的客户可行的解决scheme。

每次使用Charts.xlsm打开时,我都会使用VBA来更改引用,但是当我尝试时,会发生以下两种情况之一:工作簿产生的错误会阻止保存,或者Excel完全崩溃。

这是完美的切断切片机的代码,但会产生“保存”错误:

Sub Disconnect_Slicers() Dim oSliceCache As SlicerCache Dim PT As PivotTable Dim i As Long For Each oSliceCache In ThisWorkbook.SlicerCaches With ActiveWorkbook.SlicerCaches(oSliceCache.Name).PivotTables For i = .Count To 1 Step -1 .RemovePivotTable (.Item(i)) Next i End With Next oSliceCache End Sub 

所以…我问Excel / VBA天才,如果有任何方法,我可以维护一个相对的位置,当他们正在寻找Data.xlsm,以便无论我打开这些工作簿上的计算机,他们将总是积极联系。

非常感谢你提前!

如果两个文件总是在同一个文件夹中,你可能会这样。

A.closuresChart.xlsm文件的自动“UpdateLinks”。 您可以手动执行此操作,或者出于安全原因,始终在BeforeClose事件触发时避免一些可能的问题:

 Private Sub Workbook_BeforeClose(Cancel As Boolean) ThisWorkbook.UpdateLinks = xlUpdateLinksNever End Sub 

B.当您打开Chart.xlsm使用工作簿打开事件+另外刷新链接更改到Data.Xlsm的链接。 在这种情况下,我们检查Chart.Xlsm文件的path,并在同一个文件夹中searchData.Xlsm。 我假设只有一个链接到任何其他文件,否则可能需要一些更改:

 Private Sub Workbook_Open() 'changing first and only one link to new one Dim a a = ActiveWorkbook.LinkSources ThisWorkbook.ChangeLink Name:=a(1), _ NewName:=ThisWorkbook.Path & "\Data.xlsm", Type:=xlExcelLinks 'update the link ThisWorkbook.UpdateLink Name:=a(1), Type:=xlExcelLinks End Sub 

我承认我不考虑所有的风险,因此需要进行一些testing。