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

时间:2014-05-08 13:55:21

标签: excel vba excel-vba

我在工作簿中有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)

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

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