Удалить именованный диапазон со значением '#NAME?'или ссылается на '= # NAME?' - PullRequest
2 голосов
/ 27 сентября 2019

Невозможно удалить именованный диапазон с #NAME?

Как добавить в VBA, чтобы удалить это?

Я создал приведенный ниже код, он удаляет все именованные диапазоны в моемрабочая книга, кроме одной, подробности:

Имя: _xlfn.IFERROR Значение: #NAME?Относится к: = # ИМЯ?

'Delete All Named Ranges
Dim xName As Name
On Error Resume Next
    For Each xName In ActiveWorkbook.Names
        xName.Visible = True
        If InStr(1, xName.RefersTo, "=#NAME?") > 0 Then xName.Delete
        If InStr(1, xName.RefersTo, "#REF!") > 0 Then xName.Delete
        If InStr(xName.Value, "#REF!") > 0 Then xName.Delete
        xName.Delete
    Next xName
On Error GoTo 0
End Sub```

1 Ответ

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

Хитрость в том, что xName.RefersTo покажет исходную формулу вместо оцененного значения, например, =SomeFormulaThatDoesntExist вместо #NAME?

enter image description here

Вы можете преодолеть это с помощью Evaluate(xName.RefersTo), который вернет Error 2029 для #NAME? ошибки.Кроме того, вы можете просто добавить условие IsError(Evaluate(xName.RefersTo)) в свой код, например:

If IsError(Evaluate(xName.RefersTo)) Then xName.Delete
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...