Excel. Обращение к именованным диапазонам

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

Приветствую!

Можно ли в формулах ячеек одного листа ссылаться на именованный диапазон другого листа, причем этот именованный диапазон - уровня "листа" ?

И можно ли именованный диапазон уровня листа переделать кодом VBA в именованный диапазон уровня книги?
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

Можно ли в формулах ячеек одного листа ссылаться на именованный диапазон другого листа, причем этот именованный диапазон - уровня "листа" ?
=ИНДЕКС(Другой_Лист!Temp_Name;1;1) :)
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

А еще вопрос...
есть именованный диапазон Name_r1 (A1:A10)

в VBA пишу такой код...

Код: Выделить всё

 
Dim r1 As Range
Set r1 = Range("Name_r1")
или
Set r1 = Range("Name_r2")
или
Set r1 = Range("Name_r3")


Как мне теперь получить имя именованного диапазона, имея на входе уже диапазон r1 ?

r1.???
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Avsha,
Боюсь что только проходя в цикле по таблице имён и сравнивая ассоциированные с именами
адреса рангов ;)
Cправа в присваивании стоит выражение. Вы же могли написать
Set r1 = Range("Name_r1").Cells(1)
и какое это имя ?
Андрей Энтелис,
aentelis.livejournal.com
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

Aent, вы правы, так и сделал.
ведь список имен хранит книга - как справочник соответсявия имени и адреса диапазона, а не сам диапазон :)

вот двойным щелчком щелкаю по любой ячейке листа
и она выдает имя если ячейка - именованный диапазон :rolleyes:

Код: Выделить всё

 
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
MsgBox (GetNameOfRagne(Target))
Cancel = True
End Sub

Код: Выделить всё

 
Public Function GetNameOfRagne(r1 As Range) As String
    
    Dim tempf As String
    GetNameOfRagne = ""
    
    ' Получение имени Name заданного диапазона в текущей активной книге
    Dim iName As Name
    For Each iName In Application.ActiveWorkbook.Names
        If InStr(1, iName.Value, "!", vbTextCompare) <> 0 Then
                tempf = Right(iName.Value, Len(iName.Value) - InStr(1, iName.Value, "!", vbTextCompare))
                                                          Else
                tempf = iName.Value
        End If
                
        If tempf = r1.Cells(1, 1).AddressLocal Then GetNameOfRagne = iName.Name: Exit Function
        
    Next
End Function
Ответить