Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
此Excel VBA代码不工作。我需要更新公式中的命名范围_Excel_Vba - Fatal编程技术网

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

此Excel VBA代码不工作。我需要更新公式中的命名范围,excel,vba,Excel,Vba,我有名为Wk1、Wk2、Wk3等的工作表 每张图纸上的所有命名区域的名称都以图纸名称开头。e、 在Wk1工作表中,我有一个命名范围,称为Wk1TotalWeight 我在每张纸上都有引用这些命名范围的公式。例如=Wk1TotalWeight*2 每当我添加一个名称以Wk开头的新工作表时,我都希望该工作表上公式中的命名范围更新,以便它们以其父工作表的名称开头。例如,如果表格Wk2上的公式为=Wk1TotalWeight*2,我希望公式更新为=Wk2TotalWeight*2 我试过这个代码,但不起

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

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

我在每张纸上都有引用这些命名范围的公式。例如=Wk1TotalWeight*2


每当我添加一个名称以Wk开头的新工作表时,我都希望该工作表上公式中的命名范围更新,以便它们以其父工作表的名称开头。例如,如果表格Wk2上的公式为=Wk1TotalWeight*2,我希望公式更新为=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

为什么不简单地使用
r.Formula=Replace(r.Formula,“Wk1”,ws.Name)

这就是我做错的地方

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

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

因为我从Wk3复制到Wk4,所以公式包含以Wk3开头的命名范围。换句话说,字符串“Wk1”不在范围内。这些命名范围必须以Wk1开头,才能使代码正常工作


这就是代码不起作用的原因。多亏了上面帖子评论中的本体论

这对我很有用。您确定字符串“Wk1”可以在C166:J170中找到吗?“每当我添加新工作表时”。这可能是一个愚蠢的建议,但您是否从编辑器运行了代码?以下是我做错的地方。我有工作表Wk1、Wk2和Wk3,然后添加了一个Wk4工作表。我将公式从Wk3工作表复制到Wk4,但我希望已将公式从Wk1复制到Wk4。因为我从Wk3复制到Wk4,所以公式包含从Wk3开始的NMED范围。这就是宏不起作用的原因。谢谢本体让我思考我稍后会试试看它是否有效。请参阅上面帖子中的评论,了解我做错了什么