在当前活动工作表的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个
当我运行这段代码时,它只返回MyName1
和MyName2
– 它不包含MyName3
因为它不在活动页面上。
这个macros只会返回我的ActiveSheet
( Sheet4
)
该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“数据”。 所以如果你有data1
, datas1
和myData1
,它会运行所有这些的“do stuff here”代码。 如果你只是想要从 data
开始的范围,然后改变InStr()
行: If Left(nm.Name,4) = "data" Then
编辑:你可以将这与下面的@ user1274820build议的If nm.RefersToRange.Parent.Name = ActiveSheet.Name
行相耦合。 (只要让If
语句包含一个And
运算符)。