Страницы: 1
RSS
Имя диапазона в VBA по активной ячейке
 
Добрый день,  
Диапазон A1:D5 имеет име "qwer". Как при активной ячейке узнать имя диапазона в котором она содержится? Спасибо.
 
Так попробуйте:  
 
Sub RangeName()  
If Not Intersect(ActiveCell, [qwer]) Is Nothing Then
  MsgBox "Ячейка " & ActiveCell.Address & vbCrLf & _  
       "находится в диапазоне " & [qwer].Address & ", " & vbCrLf & _
       "имя которого - " & Names(1).Name  
Else  
   MsgBox "Ячейка " & ActiveCell.Address & vbCrLf & _  
       "не принадлежит диапазону " & [qwer].Address
End If  
End Sub
 
nilem, спасибо работает. НО хотел имя диапазона УЗНАТЬ, а не сравнить ячейку с конкретным именем (Диапазонов на листе много).
 
Function arnm(cell As Range) As String  
   Dim x  
   On Error Resume Next  
   For Each x In Application.Names  
      If Intersect(x.RefersToRange, cell) Is Nothing Then  
      Else  
           arnm = arnm & x.Name & " "  
      End If  
   Next  
   arnm = Trim(arnm)  
End Function  
Sub t()  
   Dim s  
   s = arnm(Cells(9, 4))  
End Sub  
 
ибо может быть несколько именованных диапазонов, содержащих данную ячейку
Живи и дай жить..
 
слэн, спасибо, отлично работает.  
Причем s = arnm(ActiveCell) - перечисляет все диапазоны через пробел.  
Для пользы дела: дайте, пожалуйста описание этого цикла построчно:  
For Each x In Application.Names  
If Intersect(x.RefersToRange, cell) Is Nothing Then  
Else  
arnm = arnm & x.Name & " "  
End If  
Next
 
тут несколько раньше надо начать:  
On Error Resume Next' необходимая строка, так как не все имена ссылаются на диапазон  
For Each x In Application.Names ' перечисление всех имен  
If Intersect(x.RefersToRange, cell) Is Nothing Then ' проверка на пересечение заданного диапазона с диапазоном, на кот ссылается имя : x.RefersToRange  
Else   ' если возникает ошибка(имя не ссылается на диапазон), то эта строка обеспечивает правильную работу макроса(ну и сравнение короче - не надо not)    ( not Intersect(x.RefersToRange, cell) Is Nothing не будет работать)  
arnm = arnm & x.Name & " " 'перечисление через пробел  
End If  
Next  
arnm = Trim(arnm) ' удаление ненужного пробела в конце
Живи и дай жить..
 
слэн, спасибо разобрался, но (x.RefersToRange, cell):  
cell - в данном случае адрес (переменной) активной ячейки;  
х - имя диапазона;  
x.RefersToRange - почему qwer.RefersToRange ошибка, если по логике должно быть $A$1:$D$5? Вообще RefersToRange это что?  
Спасибо.
 
это свойство объекта name  
 
у меня объекты name перечисляются в переменной x, поэтому x.referstorange  
 
 
если хотите непосредственно по имени обратиться, то будет:  
 
names("qwer").referstorange
Живи и дай жить..
 
слэн, спасибо.
Страницы: 1
Читают тему
Наверх