如何筛选Pricing Worksheet中A1:AD190范围内的命名区域
修改后的VBA代码(列出指定范围内的命名区域)
Sub ListNamedRangesInTarget() Dim nm As Name Dim targetSheet As Worksheet Dim targetRange As Range Dim nmRange As Range ' 设置目标工作表和指定范围 Set targetSheet = ThisWorkbook.Worksheets("Pricing Worksheet") Set targetRange = targetSheet.Range("A1:AD190") Debug.Print "Pricing Worksheet中A1:AD190范围内的命名区域:" For Each nm In ThisWorkbook.Names On Error Resume Next ' 跳过指向常量/非单元格的命名区域 Set nmRange = nm.RefersToRange On Error GoTo 0 ' 校验命名区域所属工作表,以及是否与目标范围存在交集 If Not nmRange Is Nothing Then If nmRange.Parent.Name = targetSheet.Name Then If Not Intersect(nmRange, targetRange) Is Nothing Then Debug.Print "- " & nm.Name & " : " & nm.RefersTo End If End If End If Next nm End Sub
关键改动说明
- 明确目标范围:直接定义要检查的工作表和单元格区间
A1:AD190,避免字符串拆分判断的潜在误差 - 错误防护:加入错误处理逻辑,跳过那些指向常量、公式而非单元格区域的命名区域,防止代码报错中断
- 范围交集判断:用
Intersect函数判断命名区域是否与目标范围存在重叠;如果需要仅统计完全包含在目标范围内的命名区域,可以将交集判断替换为:If nmRange.Address = Intersect(nmRange, targetRange).Address Then - 输出有效信息:不再仅计数,而是打印符合条件的命名区域名称和对应的引用地址,方便查看
内容的提问来源于stack exchange,提问作者D M
相关产品推荐
相关产品推荐

