首页 文章

在VBA中引用多表命名范围

提问于
浏览
1

我在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

最后一个给我一个全局错误 .

3 回答

  • 0

    您需要在每个工作表中使用工作表作用域范围,而不是跨越多个工作表的范围(这不起作用,如我们已 Build 的那样) .

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

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

    这是一种更清洁的方法 .

  • 1

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

    在即时窗口中:

    For i = 1 to names.count:Debug.print i, Names(i).RefersTo, Names(i).name:next
    

    然后,您可以使用名称或索引删除所需的特定名称 .

    希望有所帮助 .

  • 2

    Rory Archibald是Microsoft MVP

    在他的website post about named ranges他说: A Range object can only refer to cells on one worksheet. You cannot refer to cells on different sheets with one Range object.

    所以我无法完成我想要的东西,但我应该能够创建多个命名范围,并且一次只清除它们 .

    我能够完成以下代码,灵感来自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
    

相关问题