使用vba删除特定名称范围

时间:2017-12-27 07:49:10

标签: excel-vba vba excel

我有一个包含少量项目的数组,每个项目代表一个名称范围。我正在尝试编写一个代码来删除仅存在于该数组中的命名范围。例: [ARR1] = {水果,蔬菜,朋友,类}

我想通过Arr1中存在的元素名称删除所有名称范围。 Arr1在不同的时间点可以有不同的元素。

谢谢!

2 个答案:

答案 0 :(得分:0)

Sub DeleteNamedRanges()
    Dim all_names, n
    all_names = Array("Fruits", "Vegetables", "friends", "Classes")
    For Each n In all_names
        Names(n).Delete
    Next
End Sub

答案 1 :(得分:0)

代码应区分要删除的名称的范围。它还应该考虑到名称不存在的可能性。最后,由于您的阵列旨在具有不同的内容,因此无法在执行过程中指定它。因此,下面的代码有一个调用过程来指定数组和范围,以及一个执行过程,当找不到名称时它不会崩溃。

Sub CallDeleteNamedRanges()

    Dim Scope As Object
    Dim Arr() As String

    Set Scope = ThisWorkbook
'    ' you can specify a workbook, a worksheet, a table etc.
'    ' For example:-
'    Set Scope = ThisWorkbook.Worksheets("Sheet1")
    Arr = Split("Fruits,Vegetables,Friends,Classes", ",")
    DeleteNamedRanges Arr, Scope
End Sub

Private Sub DeleteNamedRanges(Arr() As String, _
                              Scope As Object)

    Dim i As Integer

    For i = 0 To UBound(Arr)
        ' an error will occur if the name doesn't exist
        On Error Resume Next
        Scope.Names(Arr(i)).Delete
    Next i
    Err.Clear
End Sub