Страницы: 1
RSS
Как переопределить диапазон именованного диапазона для разных листов, именованные диапазоны для создания связанных выпадающих списков
 
Друзья! добрый день! Помогите советом начинашке
Тема такая:
Для создания связанных выпадающих списков, в том числе и с картинками)) назначаем для элементов управления(выпадающий список) именованные диапазоны.
Далее создаем макрос для изменения диапазона этих диапазонов))
Код
Sub Диапазон_Фото_вида_здания_Если()

  ' назначаем диапазон
  If Worksheets("Лист1").Cells(3, 1).Value = 1 Then ' тогда диапазон на листе А1
     ActiveWorkbook.Names("Фото_вида_здания").RefersToR1C1 = "=А1!R1C40:R13C45"
 Else
      If Worksheets("Лист1").Cells(3, 1).Value = 2 Then ' тогда диапазон на листе А2
      ActiveWorkbook.Names("Фото_вида_здания").RefersToR1C1 = "=А2!R1C1:R13C6"
      Else
           If Worksheets("Лист1").Cells(3, 1).Value = 3 Then ' тогда диапазон на листе П1
           ActiveWorkbook.Names("Фото_вида_здания").RefersToR1C1 = "=П1!R1C1:R13C6"
           Else
           ActiveWorkbook.Names("Фото_вида_здания").RefersToR1C1 = "=П2!R1C1:R13C6"
           End If
      End If
  End If
 
End Sub

Все работает, но есть минус - при создании новых листов нужно каждый раз править руками.
Логично сделать переменную с именем листа и тут я зашел в тупик...
Код
Sub Диапазон_Фото_вида_здания()
Dim лист
лист = Worksheets("Лист1").Cells(3, 2).Text 'назначаем переменную лист (имя листа)

ActiveWorkbook.Names("Фото_вида_здания").RefersToRange = "=лист!R1C1:R13C6"  'ЭТА СТРОКА ДАЕТ ОШИБКУ 
End Sub

А конструкция:
Код
ActiveWorkbook.Names("Фото_вида_здания").RefersToR1C1 = Worksheets(лист).Range(Cells(1, 1), Cells(13, 6))

работает исправно только если нужный лист активен! Делать через Select видится не очень правильно.
Подскажите пожалуйста как правильно вписать переменную чтобы она определяла имя листа?
 
Я по синтаксису:
там, где работает пишете
Код
ActiveWorkbook.Names("Фото_вида_здания").RefersToR1C1 = "=А2!R1C1:R13C6"

где не работает:
Код
ActiveWorkbook.Names("Фото_вида_здания").RefersToRange = "=лист!R1C1:R13C6"

В одном случает RefersToR1C1
В другом RefersToRange
Может, тут порылось животное?
Кому решение нужно - тот пример и рисует.
 
это поиск зашел в тупик...вот и подбирал разные варианты
ActiveWorkbook.Names(""Фото_вида_здания").RefersToR1C1 = "=À2!R1C1:R13C6" это меняет диапазон РАБОТАЕТ!)
а такая конструкция не хочет((

лист = Worksheets("Лист1").Cells(3, 2).Text 'назначаем переменную лист (имя листа)
                                            'MsgBox (лист) 'проверка
                                          'Worksheets(лист).Activate 'проверка

    ActiveWorkbook.Names("Фото_вида_здания").RefersToR1C1 = "=лист!R1C40:R13C45"

хотя переменная определяется и лист открывает правильный...
 
Ура!!! товарищи, ура...
Проблема решена, если кому поможет буду рад)))


Sub Диапазон_Фото_вида_здания_по_Назв_Листа() 'В адресе диапазона меняется лист
Dim x As String
x = Worksheets("Лист1").Cells(3, 2).Text 'назначаем переменную лист (имя листа)
                                           'MsgBox (лист) 'проверка
                                  ' имя диапазона                                                                                       ' верхняя левая          ' нижняя правая
ActiveWorkbook.Names("Фото_вида_здания").RefersToR1C1 = Worksheets(x).Range(Worksheets(x).Cells(1, 1), Worksheets(x).Cells(13, 6))
'Range("Фото_вида_здания").Select 'Для отладки диапазона
End Sub
Страницы: 1
Наверх