Удалить все именованные диапазоны, кроме определенного списка - PullRequest
0 голосов
/ 27 сентября 2019

Я ищу, чтобы удалить все именованные диапазоны из файла Excel, кроме определенного списка именованных диапазонов (приблизительно 1000).По сути, если в файл копируются какие-либо вкладки, я хочу удалить все, что было скопировано за какое-то время, и сохранить только оригинальные именованные диапазоны.

Я попытался собрать код ниже, но яне достаточно продвинут в VBA, чтобы понять, где я иду не так.В настоящее время он выдает ошибку в строке rName.Delete, и я хотел бы как-то добавить массив для списка, чтобы он не удалялся вместо того, чтобы быть определенным в коде по отдельности.

Sub DeleteNamedRanges()
Application.Calculation = xlManual
Dim all_names, n
Dim rName As Name
For Each rName In ActiveWorkbook.Names
    If rName.Name <> "NamedRange1" And rName.Name <> "NamedRange2" 
    Then
        rName.Delete
End If
Next rName
End Sub

1 Ответ

1 голос
/ 27 сентября 2019

При циклическом просмотре коллекции и удалении элементов [возможно - см. Обсуждение выше] лучше всего работать с конца до начала, то есть примерно так:

Sub DeleteNamedRanges()

    Dim n As Long, arrKeep

    'names to not delete
    arrKeep = Array("keepThis", "andThis", "meToo")

    Application.Calculation = xlCalculationManual

    For n = ActiveWorkbook.Names.Count To 1 Step -1
        With ActiveWorkbook.Names(n)
            'is this name a keeper?
            If IsError(Application.Match(.Name, arrKeep, 0)) Then
                On Error Resume Next 'ignore any errors
                .Delete
                On Error Goto 0      'stop ignoring errors
            End If
        End With
    Next n

    Application.Calculation = xlCalculationAutomatic

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...