在VBA中引用多张命名范围
我有一个在Excel中命名的范围,我试图用VBA清除。
该范围的问题是跨越多个表跨度,我不知道如何适当引用VBA中的命名范围,因为它涵盖多个表。
命名范围“计数”设置为具有以下单元格引用的工作簿范围:
=Sheet1!$A$1, Sheet2!$A$1, Sheet3!$A$1
当清除只在一张纸上引用单元格的命名区域时,我使用以下命令:
ThisWorkbook.Sheets("Sheet1").Range("Counts").ClearContents
我已经尝试了以下,但似乎都没有工作。
ThisWorkbook.Range("Counts").ClearContents
和
Range("Counts").ClearContents
最后给我一个全球性的错误。
而不是跨越多个工作表的范围(这是行不通的,因为我们已经build立),您需要在每个工作表范围的工作表范围。
定义范围名称时,可以将其范围设置为工作簿或当前工作表。 这样,您可以在许多工作表中使用相同的范围名称。
使用VBA遍历所有工作表,访问当前工作表中的ws.Range(“TheRangeName”)并清除其内容。
这是一个更清洁的方法。
我会写一些显示名称,你可以用它来删除它…
在直接窗口中:
For i = 1 to names.count:Debug.print i, Names(i).RefersTo, Names(i).name:next
然后,您可以使用名称或索引来删除所需的特定名称。
希望有所帮助。
Rory Archibald是微软MVP
在他关于命名范围的网站上,他指出: 一个Range对象只能引用一个工作表上的单元格。 您不能使用一个Range对象引用不同工作表上的单元格。
所以我不能完成我想要的,但我应该能够创build多个命名区域,并一次清除一个。
我能够从teylyn的灵感来完成这个代码
Public Sub ClearRanges() 'Checks if named Range exists on sheet if it does then clear contents Dim ws As Worksheet Application.DisplayAlerts = False For Each ws In ThisWorkbook.Worksheets If Len(ws.Range("Counts").Name) <> 0 Then ws.Range("Counts").ClearContents End If Next ws Application.DisplayAlerts = True End Sub