首页 > 解决方案 > 根据相关的工作表重命名命名区域

问题描述

我正在尝试重命名我的命名区域(~400)以使其工作表名称作为后缀。

我应该如何正确地做到这一点?

我现在有以下代码:

Sub ChangeNamedRegions()

    Dim oldRegionName  As String
    Dim newRegionName  As String

    For Each ws In ActiveWorkbook.Worksheets
        For Each n In ActiveWorkbook.Names
            ' If Range(n).Formula Like "=" + ws.Name + "*" Then
            If Range(n).Worksheet = ws Then
                oldRegionName = Range(n).Name
                newRegionName = ws.Name + oldRegionName

                ActiveWorkbook(oldRegionName).Name = newRegionName
                With ActiveWorkbook
                    .Names(oldRegionName).Delete
                End With

            End If
        Next n
    Next ws

End Sub

提前致谢!

更新

区域将工作簿作为其父级,而不是工作表

标签: excelvba

解决方案


下面将是简单和有效的。

Sub ChangeNamedRegions()
    Dim Name As Variant
    For Each Name In ActiveWorkbook.Names
        If TypeOf Name.Parent Is Worksheet Then
            With Name
                .Name = .Parent.Name & Split(.Name, "!")(1)
            End With
        End If
    Next
End Sub

一个考虑因素是,如果工作表名称包含名称名称中不可用的字符(例如空格或括号),它将不起作用......

更新的答案

如果您需要使用定义名称所引用的工作表的名称,而不是定义名称的工作表,则可以使用名称的 RefersToRange 属性来获取引用的范围,然后使用该名称的 Worksheet 属性范围。

Sub ChangeNamedRegions()
    Dim Name As Name
    Dim ReferredToRange As Range
    For Each Name In ActiveWorkbook.Names
        On Error Resume Next
        Set ReferredToRange = Name.RefersToRange
        On Error GoTo 0
        If Not ReferredToRange Is Nothing Then
            Name.Name = ReferredToRange.Worksheet.Name & Name.Name
        End If
        Set ReferredToRange = Nothing
    Next
End Sub

推荐阅读