在which python
[your path]/miniconda3/envs/mlvision/bin/python
范围内,我有许多命名范围。
现在,我想通过遵循相关topic的第二个答案来遍历每个命名范围
Workbook
此宏向我显示了msgbox中的所有名称,例如Sub Range1()
Dim i As Integer
For i = 2 To ActiveWorkbook.Names.Count
MsgBox ActiveWorkbook.Names(i).Name
Next i
End Sub
。我按照以下方式修改脚本,以根据相应范围的名称“调用”每个范围。
C_1
我得到的错误是:
“运行时错误'1004':对象'_ Apolication的方法'Range'失败
知道我在做什么错吗?如果检查元素,我会发现Sub Range2()
Dim i As Integer
Dim rng As Range
Dim nm As Name
Dim rng_name As String
For i = 2 To ActiveWorkbook.Names.Count
Set nm = ActiveWorkbook.Names(i)
rng_name = nm.Name
Set rng = Application.Range(nm.Name) `This line yields an error
MsgBox rng.Address
Next i
End Sub
等于“ C_1”。
编辑
我相信这与命名范围的创建方式有关。这可以通过以下方式完成:
rng_name
答案 0 :(得分:1)
请参阅:
For i = 1 To ActiveWorkbook.Names.Count
Set nm = ActiveWorkbook.Names(i)
Set rng = ActiveWorkbook.Names(nm.Name) 'This is where the error was
MsgBox rng.Address
Next i
我还删除了rng_name,因为您没有使用它。
编辑1:
我无法使Application.Range(nm.Name)
正常工作,但是能够使用名为“ c”和“ d”的不同图纸上的范围使ActiveWorkbook.Range(nm.Name)
工作。我注意到nm = ActiveWorkbook.Names(i)
没有在记录时包含工作表名称。
使用下划线和数字命名范围时(我尝试过c_1和c_2),我无法使代码正常工作;在调试模式下检查nm
时,我注意到它也列出了工作表名称。我必须指定比rng .RefersToRange
来获得不显示工作表名称的单元格地址。
我又进行了两次检查,一个检查的下划线没有数字(使用“ d_”),另一个检查的下划线没有数字(使用“ name2”),并且两个都都给我相同错误。两种方案都将工作表名称保留在字符串nm
中。
这是我正在执行/逐步执行的测试代码以解决该问题:
Dim rng As Range, i As Long
For i = 1 To ActiveWorkbook.Names.Count
Set nm = ActiveWorkbook.Names(i)
'Set rng = ActiveWorkbook.Names(nm.Name)
Set rng = nm.RefersToRange
'Debug.Print rng.Address
MsgBox rng.Address
Next i
在所有情况下都使用Set rng = nm.RefersToRange
,而Set rng = ActiveWorkbook.Names(nm.Name)
仅使用字母字符名称。
建议,坚持使用.RefersToRange
作为可靠的代码。