Документация 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 к диапазону, чтобы мой код не ошибался?
ОБНОВИТЬ
Я нашел хак для этого, но предпочел бы более чистый способ. Я проверяю, содержит ли строковое значение именованного диапазона знак доллара, который косвенно говорит мне, содержит ли он значение адреса (которое будет иметь диапазон):
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