在更新单元格公式引用时复制工作表

我有5张工作簿。 当我“手动”复制其中的两个(在同一工作簿中)时,引用(在单元格公式中)会自动更改为新复制的工作表。 例如在一些单元格中,我有以下公式:

=IF('1_Result'!B5="";NA();'1_Result'!B5*$C$3) 

在复制新工作表后,新工作表中的公式将更改为:

 =IF('1_Result (2)'!B5="";NA();'1_Result (2)'!B5*$C$3) 

“1_Result”是原稿,“1_Result(2)”是复印的纸张。 当我用下面的代码进行复制时:

 t1.Copy After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = nshn & "_Table" 

…复制工作表中的公式不会更改引用,所以它保持不变,如下所示:

 =IF('1_Result'!B5="";NA();'1_Result'!B5*$C$3) 

我应该如何修改代码,以便引用被更改?

正如我在评论中所提到的,如果您想要更新引用,请同时复制两张表:

 Sheets(Array("Sheet1", "1_Result")).Copy After:=Sheets(Sheets.Count) 

这个对我有用:

Sheet1最初具有公式='1_Result'!B5并且在复制后张Sheet1 (2)具有公式='1_Result (2)'!B5

正如simco注意到的那样,我没有一次性将这些表格复制在一起,而是一个接一个地复制。 下面的代码解决了这个问题:

 Sheets(Array("1_Table", "1_Result")).Copy After:=Sheets(Sheets.Count) Sheets(Sheets.Count - 1).Name = nshn & "_Table" Sheets(Sheets.Count).Name = nshn & "_Result" 

在试图弄清楚什么是错误的时候,我发现了一个绝对不被推荐使用的替代解决scheme,但是可能对某个人有所帮助。 我使用了一个函数来replace一个表单中的另一个string。 代码如下:

 Function FormulaFindAndReplace(sh As Worksheet, phrase As String, replacement As String) With sh Set Found_Link = Cells.Find(what:=phrase, After:=ActiveCell, _ LookIn:=xlFormulas, lookat:=xlPart, searchorder:=xlByRows, _ searchdirection:=xlNext, MatchCase:=False) While UCase(TypeName(Found_Link)) <> UCase("Nothing") Found_Link.Activate Found_Link.Formula = Replace(Found_Link.Formula, phrase, replacement) Set Found_Link = Cells.FindNext(After:=ActiveCell) Wend End With End Function