Про документацію Microsoft йдеться RefersToRange :
Якщо об'єкт Name не відноситься до діапазону (наприклад, якщо він посилається до константи або формули), це властивість виходить з ладу.
Я намагаюся переглядати всі названі діапазони на робочому аркуші.
Private Sub Something()
Dim namedRanges As names
Set namedRanges = ActiveSheet.names
Dim targetSheet As Worksheet
Set targetSheet = Sheet1
targetSheet.Cells.Clear
Dim i As Integer
For i = 1 To namedRanges.count
targetSheet.Cells(i, 2).Value = namedRanges(i).Name
targetSheet.Cells(i, 3).Value = namedRanges(i).RefersToRange.Address
Next
End Sub
У вищезазначеному мій код буде невдалим, якщо будь-який NamedRange не посилається на діапазон. Як я можу перевірити, чи відноситься об'єкт Name до діапазону, щоб мій код не вийшов з ладу?
UPDATE
Я знайшов hack щоб зробити це але я віддаю перевагу більш чистий шлях. Я перевіряю, чи містить рядок значення іменного діапазону знак долара, який непрямо повідомляє мені, чи містить він значення адреси (який буде діапазон):
For i = 1 To namedRanges.count
targetSheet.Cells(i, 2).Value = namedRanges(i).Name
If InStr(namedRanges(i).Value, "$") > 0 Then
targetSheet.Cells(i, 3).Value = namedRanges(i).RefersToRange.Address
End If
Next
=OFFSET(NameRange,0,0)
може мати дійсний діапазон, і відносна назва діапазону '= A1' також діє без $.