Excel公式在链接到外部工作表时返回#REF并复制

时间:2017-01-21 06:29:53

标签: excel vba excel-vba external-links

我有一个电子表格October2016.xls,其中包含指向其他工作表的外部链接的公式。当我将工作表复制到另一个目录时,我将收到#REF错误。例如,我需要链接到Assembly Totals.xls

在我计算机上的原始目录中,我将打开October2016.xls文件,在单元格中,我将看到如下内容: =' C:\ users \ desktop ... PROD DEPT \ PAPERLESS \ 2016 \ Oct \ Defects [Assembly Totals.xls]!Total'!A1

当复制到另一台计算机(或我计算机上的文件位置)时,我会得到: =' C:\ users \ desktop ... PROD DEPT \ PAPERLESS \ 2016 \ Oct \ Defects [Assembly Totals.xls]!#REF'!A1

我知道公式仍在尝试遵循旧的道路。但显然当复制到不同的目录时,它会变得混乱。如果我将#REF替换为' Total'然后它工作正常 - 我认为这是相对引用派上用场的地方。但问题是Excel要我从更新值窗口中选择公式(Assembly Totals.xls)中的链接电子表格以获取新保存的路径/文件位置。当你有超过100个替补时,这是乏味的。

我尝试过编写查找和替换宏来改变路径。即将单词#REF替换为Total。我还用一个"空白"替换旧路径的一部分。因为路径的那部分在新目录路径中不再有效。例如,假设我只复制了\ Defects [Assembly Totals.xls]中的文件!Total'!A1。因此,我将删除" PROD DEPT \ PAPERLESS \ 2016 \ Oct \"因为新电脑不会有这些文件。

但是我仍然需要数百个更新值窗口,我需要选择文件。

以下是我为消除更新值窗口所做的工作: - 但是,这并不会阻止窗口出现。

Sub terfuge()
' todo: Assign keystroke shortcut
If Application.DisplayAlerts Then
Application.DisplayAlerts = False
Else
Application.DisplayAlerts = True
End If
End Sub

这是我的查找和替换功能 - 工作正常 - 它只是不断出现的更新值窗口

Sub Multi_FindReplace()

Dim sht As Worksheet
Dim fndList As Variant
Dim rplcList As Variant
Dim x As Long



fndList = Array("#REF", "PROD DEPT\PAPERLESS\2016\Oct\")

rplcList = Array("Total", "")

'Loop through each item in Array lists
For x = LBound(fndList) To UBound(fndList)
'Loop through each worksheet in ActiveWorkbook
For Each sht In ActiveWorkbook.Worksheets
sht.Cells.Replace What:=fndList(x), Replacement:=rplcList(x), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
SearchFormat:=False, ReplaceFormat:=False
Next sht

Next x

End Sub 

由于 马丁

1 个答案:

答案 0 :(得分:0)

不完全是一个完整的答案,但我不会专注于尝试查找和替换外部电子表格引用以更新公式 - Excel应该能够在文件路径更改时维护外部电子表格引用如果一切都已设置正确 ...查找和替换参考文献是一种解决方法,解决方法1)通常会分崩离析2)通常没有必要进行适当的规划。

所以我会专注于以下内容: 1)可能导致电子表格丢失其引用的任何一个电子表格发生了什么 - 在工作和不工作的引用之间对源电子表格做了什么?如果该文件是手动或通过宏更新而没有经过适当的注意,您最终可能会删除引用..

2)检查您要执行的操作的结构以及如何使用这两个电子表格 - 您是否需要在外部电子表格中包含数据?您可以编写一个宏来将源文件中的数据复制并粘贴到主电子表格的辅助选项卡中 - 这样您的所有公式都不会包含外部参考...

希望这有帮助, TheSilkCode