0

我有一个电子表格 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

我知道该公式仍在尝试遵循旧路径。但很明显,当复制到不同的目录时,它会变得混乱。如果我用“Total”这个词替换#REF,那么它工作得很好——我认为这是相对引用派上用场的地方。然而,问题是 Excel 希望我从更新值窗口中选择公式 (Assembly Totals.xls) 中的链接电子表格,以获取新保存的路径/文件位置。当您有超过 100 个替代品时,这很乏味。

我尝试编写一个查找和替换宏来更改路径。即用单词Total 替换单词#REF。我还将旧路径的一部分替换为“空白”,因为该部分路径在新目录路径中不再有效。例如,假设我只从 \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 

谢谢马丁

4

1 回答 1

0

不完全是一个完整的答案,但我不会专注于尝试查找和替换外部电子表格引用以更新您的公式 -如果一切设置正确,当文件路径发生更改时,Excel 应该能够维护外部电子表格引用......查找和替换引用是一种变通方法,变通方法 1) 通常会崩溃,并且 2) 通常没有必要通过适当的计划。

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

2)检查你正在尝试做的事情的结构以及你是如何使用这两个电子表格的——你需要在外部电子表格中有数据吗?您可以编写一个宏来将源文件中的数据复制并粘贴到主电子表格的辅助选项卡中 - 这样您的所有公式都不会包含外部引用......

希望这会有所帮助,TheSilkCode

于 2017-01-21T08:52:02.717 回答