如何用vba遍历excel工作簿中名称管理器中的名称?

在excel中可以通过定义名称的方式给单元格区域取别名,这些别名可以用于函数公式中。

除了通过定义名称的方式,当插入“表格”后也会自动添加名称。

除了可见的名称以外,还有一些内置的不可见名称如 Database, Print_Area, 或者 Auto_Open等。

在vba中Name对象表示名称管理器中的名称。所有的名称组成了Names集合对象。

Application、Workbook、 Worksheet 对象都可以返回Name对象。

如果要遍历当前工作簿中的所有名称,可以使用如下的代码

以下的代码将遍历所有名称,并删除定义的名称。

Sub QQ1722187970()
    Dim oName As Name
    For Each oName In Excel.ActiveWorkbook.Names
        With oName
            If .Visible = True Then
                Debug.Print .Name, .RefersTo, .RefersToLocal
                '删除所有的名称
                .Delete
            End If
        End With
    Next
End Sub

如果要给工作簿中添加名称,可以使用Names对象的Add方法,代码如下:

Sub QQ1722187970()
    Dim oWK As Worksheet
    Dim oRng As Range
    Set oWK = Excel.ActiveSheet
    Dim sText As String
    sText = """" & Join(Array("a", "d", "c"), ",") & """"
    Dim oName As Name
    '新增一个名称,名称的值为一个字符串
    Set oName = Excel.ThisWorkbook.Names.Add(Name:="MyName", RefersTo:="=" & sText)
End Sub
       

发表评论