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