此Excel VBA代码不起作用。 我需要更新公式中的命名范围

我有名为Wk1,Wk2 Wk3等的工作表

每张纸上的所有命名区域都有以纸张名称开头的名称。 例如在Wk1工作表我有一个名为Wk1TotalWeight范围。

我有公式,每个sheet.eg = Wk1TotalWeight * 2引用这些命名范围

每当我添加一个名称以WK开头的新工作表时,我希望该表中的公式中的命名范围更新,以便它们以父表的名称开始。 例如,如果一个formaula = Wk1TotalWeight * 2在工作表Wk2我想公式更新= Wk2TotalWeight * 2

我试过这个代码,但它不工作。

Sub ChangeWkNamesInFormulasOnNewWksheet() Dim ws As Worksheet Dim r As Range For Each ws In Worksheets If InStr(1, ws.Name, "Wk", 1) > 0 Then For Each r In ws.Range("C118:I119") r.Formula = Replace(r.Formula, "Wk1", r.Parent.Name) Next r For Each r In ws.Range("C166:J170") r.Formula = Replace(r.Formula, "Wk1", r.Parent.Name) Next r End If Next ws MsgBox "Done" End Sub 

inheritance人我做错了什么。

我有工作表Wk1,Wk2和Wk3,然后添加一个Wk4工作表。

我从Wk3工作表复制公式Wk4,但我应该从Wk1复制公式Wk4。

因为我从Wk3复制到Wk4公式包含以Wk3开头的命名范围。 换句话说,string“WK1”不在范围内。 这些命名范围需要以Wk1开始,以便代码正常工作

这就是为什么代码不起作用。 感谢上面的post中的评论中的本体

为什么不使用简单的r.Formula = Replace(r.Formula, "Wk1", ws.Name)