1

我对此进行了疯狂的研究,我担心没有答案。但也许这个网站上真正聪明的人可以提供帮助。

我有两个可以一起工作的工作簿 - Charts.xlsm 和 Data.xlsm。它们总是一起保存在同一个文件夹中。Charts.xlsm 显然包含我所有的图表,但它们都链接到 Data.xlsm 中的表作为其来源。我的 Charts.xlsm 中还有很多切片器连接到图表,当它们连接到具有相同数据源的图表时,它们共享缓存。这两个工作簿始终同时打开,因此数据源引用如下所示:'Data.xlsm'!Table1

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

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

如果我想手动将其更改回本地引用,我必须首先检查并断开每个切片器,刷新表,然后重新连接每个切片器。对我的客户来说不是一个可行的解决方案。

每次打开 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 时,是否有任何方法可以保持我的图表的相对位置,这样无论我在哪台计算机上打开这些工作簿,他们都会始终保持积极联系。

非常感谢你!

4

1 回答 1

2

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

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

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

B. 当您打开 Chart.xlsm 时,使用 Workbook Open 事件 + 额外刷新链接将链接更改为 Data.Xlsm。在这种情况下,我们检查 Chart.Xlsm 文件的路径并在同一文件夹中搜索 Data.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

我承认我没有考虑所有风险,因此需要进行一些测试。

于 2013-03-09T21:34:00.680 回答