循环遍历Excel工作表中的所有命名范围

时间:2014-12-01 17:46:50

标签: excel vba excel-vba

我需要遍历我工作表中的所有命名范围 我目前正在这样做:

For Each nm In ActiveWorkbook.Names

问题是此工作表的名称具有全局范围和工作表范围 此循环仅获取全局范围 我试过了:

For Each nm In Activeworkbook.Sheets(1).Names

但无法使其发挥作用。此循环也只获取具有全局范围的命名范围。想法?
我知道最好的解决方案是更改名称的范围,但我无法做到。

3 个答案:

答案 0 :(得分:5)

今天能让它发挥作用。要在这里发帖,我的问题要简单得多,但这不是一个好主意。

我真正要做的是从工作表中导入一些值(使用application.getopenfilename选择并使用workbooks.open打开)。 所以我遍历了这个"导入的所有名字"选择并将这些范围的值导入到原始工作表中具有相同名称的范围。

for each nm in thisworkbook.names
    if left(nm.name, 5) = "campo" then
        'here I make my copy
    end if
next nm

事实证明,当你有一个带有工作表范围的名称时,nm.name会返回如下内容:

 nameOfSheet!nameOfField

所以我永远无法接受。为了解决我的问题,我使用了以下行。谢谢大家试图帮助我。

currentName = Mid(nm.Name, InStr(1, nm.Name, "!") + 1)

答案 1 :(得分:2)

Dim intCounter As Integer
Dim nmTemp As Name

For intCounter = 1 To ActiveWorkbook.Names.Count
   MsgBox ActiveWorkbook.Names(intCounter)
Next intCounter

答案 2 :(得分:0)

Dim Obj as Variant
For Each Obj In ThisWorkbook.Names
    If InStr(Obj.Name, "ExternalData") > 0 Then
        Obj.Delete
    End If
Next Obj

提炼hend的答案,我们可以使用InStr来确定一个字符串是否在名称范围的名称内,这适用于本地和全局范围名称范围