首页 文章

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

提问于
浏览
3

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

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

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

    这个对我有用:

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

  • 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

    在试图找出问题的同时,我找到了一种绝对不建议使用的替代解决方案,但可能对某人有所帮助 . 我使用的函数在单个工作表中将字符串替换为另一个字符串 . 这是代码:

    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
    

相关问题