在VBA中引用多页命名范围

在VBA中引用多页命名范围,vba,excel,Vba,Excel,我试图使用VBA清除Excel中的一个命名范围 该范围的问题是跨越多个图纸,我不确定如何在VBA中正确引用命名范围,因为它覆盖多个图纸 命名范围“计数”设置为工作簿范围,并具有以下单元格引用: =Sheet1!$A$1, Sheet2!$A$1, Sheet3!$A$1 清除仅在一张图纸上引用单元格的命名区域时,我使用以下方法: ThisWorkbook.Sheets("Sheet1").Range("Counts").ClearContents 我试过以下方法,但两种方法都不管用 Thi

我试图使用VBA清除Excel中的一个命名范围

该范围的问题是跨越多个图纸,我不确定如何在VBA中正确引用命名范围,因为它覆盖多个图纸

命名范围“计数”设置为工作簿范围,并具有以下单元格引用:

=Sheet1!$A$1, Sheet2!$A$1, Sheet3!$A$1
清除仅在一张图纸上引用单元格的命名区域时,我使用以下方法:

ThisWorkbook.Sheets("Sheet1").Range("Counts").ClearContents

我试过以下方法,但两种方法都不管用

ThisWorkbook.Range("Counts").ClearContents


最后一个给了我一个全局错误。

我会写一些显示名称的东西,你可以用它来删除它

在即时窗口中:

For i = 1 to names.count:Debug.print i, Names(i).RefersTo, Names(i).name:next
然后,您可以使用th name或索引删除所需的特定名称

希望有帮助。

是微软的MVP

他在他的报告中指出:范围对象只能引用一张工作表上的单元格。不能使用一个范围对象引用不同工作表上的单元格。

因此,我无法实现我想要的,但我应该能够创建多个命名范围,并一次清除一个

我能够完成下面的代码,灵感来自

公共子ClearRanges()
'检查工作表上是否存在命名范围,如果存在,则清除内容
将ws设置为工作表
Application.DisplayAlerts=False
对于此工作簿中的每个ws。工作表
如果Len(ws.Range(“Counts”).Name)为0,则
ws.Range(“计数”).ClearContents
如果结束
下一个ws
Application.DisplayAlerts=True
端接头

在每个工作表中,您需要一个工作表范围的范围,而不是跨多个工作表的范围(正如我们所确定的,该范围不起作用)

定义范围名称时,可以将其范围设置为工作簿或当前工作表。这样,可以在多个图纸中使用相同的范围名称

使用VBA循环浏览所有工作表,访问当前工作表上的ws.Range(“TheRangeName”)并清除其内容


这是一种更干净的方法。

我想你可能误解了我想要的是什么我想要清除命名范围中的值而不是删除名称你是如何在多个工作表中定义范围名称的?您可以发布范围名称公式吗?我现在已将其添加到原始问题中,Microsoft要求这样做,但它也不适用于Sub ClearRange()应用程序。转到参考:=“MyRange”选择。ClearContents End SubHow您如何使用范围?我找不到任何能在这样的范围内工作的东西,甚至连SUM()都找不到。那么你在用它做什么呢?我只是想让它在可能的情况下清除命名范围区域,而不是在每张图纸上有多个命名范围,以避免混淆,但这似乎是不可能的。
For i = 1 to names.count:Debug.print i, Names(i).RefersTo, Names(i).name:next
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