Очистка именованных диапазонов адресов с ошибками (например, #REF!) - PullRequest
0 голосов
/ 14 января 2019

Я установил именованный диапазон, назовем его RngIn. У него 3 клетки, и его адрес относится к A1: A3

Далее я удаляю строку 2.

Мой RngIn теперь показывает #REF! ошибка (правильно) в свойстве RefersTo: "= A1, Лист1! #REF! А2"

Это означает, что я не могу манипулировать остальной частью этого именованного диапазона с помощью VBA из-за метода «Range» ошибки глобального объекта.

Диапазон создается во время процесса, и если впоследствии пользователю по какой-либо причине потребуется удалить одну строку, мой будущий код завершится ошибкой, поскольку ему необходимо знать, где находятся остальные данные именованного диапазона ...

Я пробовал много способов получить доступ к информации об оставшемся адресе для этого диапазона в VBA, но до сих пор не получилось, например,

Dim RngAddress As String
Dim RngIn As Range

Set RngIn = Range("A1:A3")
RngAddress = RngIn.Address
RngAddress = RngIn.RefersToRange.Address
RngAddress = RngIn.RefersTo
RngAddress = Replace(RngIn.Address, "Sheet1!#REF!", "")

В идеале я хочу видеть в текстовой строке результат для RngIn: «= А1, А2» Потому что A2 - это местоположение данных, которые изначально были в A3.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Не уверен, что я хорошо понимаю: в вашем примере кода не используются определенные имена (именованные диапазоны). Предположим, вы создали имя RangeIn, которое ссылается на A1, A3, A5, а затем удалили строку 3.

RefersTo для RangeIn теперь =Sheet1!$A$1,Sheet1!#REF!,Sheet1!$A$4

Этот код удаляет Sheet1! #REF !, чтобы оставить Name RangeIn со ссылкой на =Sheet1!$A$1,Sheet1!$A$4

Option Explicit
Option Compare Text
Sub ChangeRef()
Dim strAd As String
strAd = ThisWorkbook.Names("RangeIn").RefersTo
strAd = Replace(strAd, "Sheet1!#REF!,", "")
ThisWorkbook.Names("RangeIn").RefersTo = strAd
End Sub
0 голосов
/ 14 января 2019

В таких случаях я устанавливаю начальную и конечную точки моих именованных диапазонов так, чтобы они были ячейкой выше и ячейкой ниже диапазона, в котором пользователь может удалить данные, а затем с помощью функции OFFSET или INDEX изменили размер этого диапазона, чтобы исключить его. мои закладки. Или я использую таблицы Excel, которые могут обрабатывать удаление строк без возврата ошибок #REF.

...