我在工作簿中有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)
我应该如何修改代码,以便更改引用?
答案 0 :(得分:2)
正如我在评论中提到的,如果您想要更新引用,请同时复制两张表:
Sheets(Array("Sheet1", "1_Result")).Copy After:=Sheets(Sheets.Count)
它对我有用:
Sheet1
最初有公式='1_Result'!B5
,在复制后,Sheet1 (2)
表格='1_Result (2)'!B5
答案 1 :(得分:0)
当 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"
答案 2 :(得分:0)
在试图找出问题的同时,我找到了一种绝对不建议使用的替代解决方案,但可能对某人有所帮助。我使用的函数在单个工作表中将字符串替换为另一个字符串。这是代码:
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