在当前活动工作表的Excel VBA中循环遍历所有命名的范围

您好,我正在寻找遍历在我的activeworksheet中find的所有命名范围,然后做一些事情给他们。 但是我已经使用下面的代码,但似乎并没有产生任何东西。 另外,如果我可以遍历包含某些单词的命名范围,这将是一件好事。 例如,我命名的范围名为data1,data2,data3等等。 如果他们包含单词数据,我只想处理它们。

For Each nm In Activesheets.Names MsgBox "nm.name" Next nm 

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

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

^此代码将只返回指向活动工作表上范围的命名范围。

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

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

在这里你可以看到我在Sheet4上有2个命名范围,在Sheet3上有1个

当我运行这段代码时,它只返回MyName1MyName2 – 它不包含MyName3因为它不在活动页面上。

范围

这个macros只会返回我的ActiveSheetSheet4

名称

该macros将遍历工作簿中的所有命名区域。 它将上面的注释考虑在内,并显示如何使用特定的范围进行操作。

 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 

请注意,使用InStr()将在名称的任何位置find“数据”。 所以如果你有data1datas1myData1 ,它会运行所有这些的“do stuff here”代码。 如果你只是想要 data 开始的范围,然后改变InStr()行: If Left(nm.Name,4) = "data" Then

编辑:你可以将这与下面的@ user1274820build议的If nm.RefersToRange.Parent.Name = ActiveSheet.Name行相耦合。 (只要让If语句包含一个And运算符)。