在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