您好我希望遍历我的activeworksheet中找到的所有命名范围,然后对它们执行某些操作。但是,我使用了下面的代码,但它似乎没有产生任何东西。此外,如果我可以遍历包含某些单词的命名范围,那将是很好的。例如,我的命名范围被命名为data1,data2,data3等。如果它们包含单词data,我只想处理它们。
For Each nm In Activesheets.Names
MsgBox "nm.name"
Next nm
答案 0 :(得分:4)
如果您只想从活动工作表中获取名称,请使用:
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
,因为它不在活动工作表上。
此宏只会返回ActiveSheet
(Sheet4
)
答案 1 :(得分:2)
此宏将循环遍历工作簿中的所有命名范围。它将上述评论纳入考虑范围,并展示了如何使用特定范围进行操作。
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()
会在名称中找到 where 。因此,如果您拥有data1
,datas1
和myData1
,则会为所有这些代码运行“在此处执行此操作”代码。如果您只想使用data
开始,则将InStr()
行更改为:If Left(nm.Name,4) = "data" Then
修改:您可以将其与下面@ user1274820建议的If nm.RefersToRange.Parent.Name = ActiveSheet.Name
行结合使用。 (只需将If
语句包含And
运算符)。