Можно ли получить имя диапазона, в котором находится активная ячейка? - PullRequest
0 голосов
/ 10 марта 2020

Сценарий: Диапазон именуется «Собака», а именованный диапазон «Собака» относится к A1: D4. Активная ячейка находится в ячейке B3, которая находится в пределах именованного диапазона.

Можно ли получить имя именованного диапазона, в котором находится активная ячейка? ie вернуть имя "Собака"?

Ответы [ 3 ]

3 голосов
/ 10 марта 2020

Возможно, что-то вроде следующего, который проверяет Intersection ActiveCell и каждого именованного диапазона.

On Error Resume Next ... On Error GoTo 0 необходим, так как Intersect завершится неудачно, когда ActiveCell и именованный диапазон находятся на разных листах, или если n не является именованным диапазоном, но если он ссылается, например, на константу или формулу.

Sub test()
    Dim n As Name
    For Each n In ActiveWorkbook.Names

        Dim rng As Range
        Set rng = Nothing

        On Error Resume Next
        Set rng = Intersect(ActiveCell, n.RefersToRange)
        On Error GoTo 0

        If Not rng Is Nothing Then
            Debug.Print n.Name
        End If
    Next
End Sub
1 голос
/ 10 марта 2020

Это должен быть более надежный способ ...

Sub Test()    
    MsgBox NamesUsedBy(ActiveCell)        
End Sub



Function NamesUsedBy(r As Range)

    Dim s$, n

    On Error Resume Next
    For Each n In ThisWorkbook.Names
        If Intersect(r, Evaluate(Mid(n, 2))).Row Then
            If Err = 0 Then s = s & ", " & n.Name
        End If
        Err.Clear
    Next
    NamesUsedBy = Mid(s, 3)

End Function
0 голосов
/ 10 марта 2020

Вероятно, есть более элегантный способ сделать это, но это должно сработать.

Sub test()
    Dim currentrange As Range
    Dim r As Variant

    Set currentrange = ActiveCell 
    For Each r In ThisWorkbook.Names 
        If Not Application.Intersect(currentrange, Range(Right(r, InStr(1, r, "$")))) Is Nothing Then
            Debug.Print r.Name
        End If
    Next r

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