Страница 1 из 1
Excel. Обращение к именованным диапазонам
Добавлено: 26 июн 2008, 15:22
Avsha
Приветствую!
Можно ли в формулах ячеек одного листа ссылаться на именованный диапазон другого листа, причем этот именованный диапазон - уровня "листа" ?
И можно ли именованный диапазон уровня листа переделать кодом VBA в именованный диапазон уровня книги?
Re: Excel. Обращение к именованным диапазонам
Добавлено: 27 июн 2008, 10:15
Avsha
Можно ли в формулах ячеек одного листа ссылаться на именованный диапазон другого листа, причем этот именованный диапазон - уровня "листа" ?
=ИНДЕКС(Другой_Лист!Temp_Name;1;1)

Re: Excel. Обращение к именованным диапазонам
Добавлено: 10 июл 2008, 10:51
Avsha
А еще вопрос...
есть именованный диапазон 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.???
Re: Excel. Обращение к именованным диапазонам
Добавлено: 10 июл 2008, 18:00
Aent
Avsha,
Боюсь что только проходя в цикле по таблице имён и сравнивая ассоциированные с именами
адреса рангов

Cправа в присваивании стоит выражение. Вы же могли написать
Set r1 = Range("Name_r1").Cells(1)
и какое это имя ?
Re: Excel. Обращение к именованным диапазонам
Добавлено: 11 июл 2008, 10:21
Avsha
Aent, вы правы, так и сделал.
ведь список имен хранит книга - как справочник соответсявия имени и адреса диапазона, а не сам диапазон
вот двойным щелчком щелкаю по любой ячейке листа
и она выдает имя если ячейка - именованный диапазон
Код: Выделить всё
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