循环浏览当前活动工作表中Excel VBA中的所有命名范围

use*_*135 3 excel vba excel-vba

嗨,我想遍历我在activeworksheet中找到的所有命名范围,然后对它们做一些事情。但是,我使用了下面的代码,但似乎什么也没产生。另外,如果我可以遍历包含某些单词的命名范围,那将是很好的。例如,我的命名范围被命名为data1,data2,data3,依此类推。如果它们包含单词数据,我只想对其进行处理。

For Each nm In Activesheets.Names
    MsgBox "nm.name"
Next nm
Run Code Online (Sandbox Code Playgroud)

Bru*_*yne 7

该宏将循环遍历工作簿中的所有命名范围。它考虑了上述评论,并展示了如何在特定范围内做事。

Sub nameLoop()
Dim nm
Dim wb As Workbook
Set wb = ActiveWorkbook
For Each nm In wb.Names
    If InStr(1, nm.Name, "data") Then
        ' Do stuff with the named range.
        Debug.Print nm.Name
    End If
Next nm
End Sub
Run Code Online (Sandbox Code Playgroud)

请注意,使用将在名称中的任何位置InStr()查找“数据” 。因此,如果您有、、 和,它将为所有这些运行“在此处执行操作”代码。如果您只想以 开头的范围,则将该行更改为:data1datas1myData1dataInStr()If Left(nm.Name,4) = "data" Then

编辑:您可以将其与If nm.RefersToRange.Parent.Name = ActiveSheet.Name 下面@user1274820 建议的行结合起来。(只需让If语句包含一个And运算符即可)。


use*_*820 6

如果只想从活动工作表中获取名称,请使用以下命令:

Sub Test()
For Each nm In ActiveWorkbook.Names
    If nm.RefersToRange.Parent.Name = ActiveSheet.Name Then MsgBox nm.Name
Next nm
End Sub
Run Code Online (Sandbox Code Playgroud)

^此代码将仅返回引用活动工作表上范围的命名范围。

nm.RefersToRange.Parent 将返回与范围关联的工作表。

然后,我们可以使用检索其名称.Name并将其与ActiveWorksheet名称进行比较。

在这里您可以看到我有2个命名范围Sheet4和1个Sheet3

当运行该代码,它只返回MyName1MyName2-其不包括MyName3因为它不是在有源片。

范围

此宏只会返回我ActiveSheetSheet4)上的

名字