Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как каждой следующей ячейке присвоить список? - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Как каждой следующей ячейке присвоить список?
yuka Дата: Среда, 19.12.2012, 10:50 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 94
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
У меня несколько готовых именованных диапазонов.
Есть несколько ячеек (например Range("A2:D2"). Как каждой из этих ячеек присвоить ниспадающий список, программно?
 
Ответить
СообщениеУ меня несколько готовых именованных диапазонов.
Есть несколько ячеек (например Range("A2:D2"). Как каждой из этих ячеек присвоить ниспадающий список, программно?

Автор - yuka
Дата добавления - 19.12.2012 в 10:50
Саня Дата: Среда, 19.12.2012, 10:59 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
записываем макрос:
[vba]
Code
Sub Макрос4()
'
' Макрос4 Макрос
'

'
     With Selection.Validation
         .Delete
         .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
         xlBetween, Formula1:="=диап1"
         .IgnoreBlank = True
         .InCellDropdown = True
         .InputTitle = ""
         .ErrorTitle = ""
         .InputMessage = ""
         .ErrorMessage = ""
         .ShowInput = True
         .ShowError = True
     End With
End Sub
[/vba]

ампутация "пудрета":
[vba]
Code
Sub AddList(r As Range, sNamedRange As String)
     With r.Validation
         .Delete
         .Add Type:=xlValidateList, Formula1:="=" & sNamedRange
     End With
End Sub

Sub Main()
     Dim c As Range
     For Each c In Range("A2:D2")
         AddList c, "диап1"
     Next c
End Sub
[/vba]
 
Ответить
Сообщениезаписываем макрос:
[vba]
Code
Sub Макрос4()
'
' Макрос4 Макрос
'

'
     With Selection.Validation
         .Delete
         .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
         xlBetween, Formula1:="=диап1"
         .IgnoreBlank = True
         .InCellDropdown = True
         .InputTitle = ""
         .ErrorTitle = ""
         .InputMessage = ""
         .ErrorMessage = ""
         .ShowInput = True
         .ShowError = True
     End With
End Sub
[/vba]

ампутация "пудрета":
[vba]
Code
Sub AddList(r As Range, sNamedRange As String)
     With r.Validation
         .Delete
         .Add Type:=xlValidateList, Formula1:="=" & sNamedRange
     End With
End Sub

Sub Main()
     Dim c As Range
     For Each c In Range("A2:D2")
         AddList c, "диап1"
     Next c
End Sub
[/vba]

Автор - Саня
Дата добавления - 19.12.2012 в 10:59
yuka Дата: Среда, 19.12.2012, 11:08 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 94
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
а если нужно каждой следующей ячейке разные именованные диапазоны?
A2 - диап1
B2 - диап2
C2 - диап3
D2 - диап4


Сообщение отредактировал yuka - Среда, 19.12.2012, 11:09
 
Ответить
Сообщениеа если нужно каждой следующей ячейке разные именованные диапазоны?
A2 - диап1
B2 - диап2
C2 - диап3
D2 - диап4

Автор - yuka
Дата добавления - 19.12.2012 в 11:08
Саня Дата: Среда, 19.12.2012, 11:15 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
...тогда так
[vba]
Code
Sub Main()
     Dim c As Range, i as integer
     For Each c In Range("A2:D2")
         i=i+1
         AddList c, "диап" & i
     Next c
End Sub
[/vba]
 
Ответить
Сообщение...тогда так
[vba]
Code
Sub Main()
     Dim c As Range, i as integer
     For Each c In Range("A2:D2")
         i=i+1
         AddList c, "диап" & i
     Next c
End Sub
[/vba]

Автор - Саня
Дата добавления - 19.12.2012 в 11:15
yuka Дата: Среда, 19.12.2012, 11:25 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 94
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Класс!! Спасибо большое!
 
Ответить
СообщениеКласс!! Спасибо большое!

Автор - yuka
Дата добавления - 19.12.2012 в 11:25
yuka Дата: Четверг, 20.12.2012, 14:12 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 94
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
а можно еще вопрос...
Мне надо этой переменной c присвоить ячейку, потом обратиться в эту функцию:
типа того:
[vba]
Code
Sub AddList(r As Range, sNamedRange As String)
     With r.Validation
         .Delete
         .Add Type:=xlValidateList, Formula1:="=" & sNamedRange
     End With
End Sub
[/vba]

[vba]
Code
Sub Main()
     Dim c As Range
     c=Target.Offset(0,1).Value    '<----тут он выдает мне ошибку object variable or with block variable not set
     For Each c In Range("A2:D2")
         AddList c, "диап1"
     Next c
End Sub
[/vba]
 
Ответить
Сообщениеа можно еще вопрос...
Мне надо этой переменной c присвоить ячейку, потом обратиться в эту функцию:
типа того:
[vba]
Code
Sub AddList(r As Range, sNamedRange As String)
     With r.Validation
         .Delete
         .Add Type:=xlValidateList, Formula1:="=" & sNamedRange
     End With
End Sub
[/vba]

[vba]
Code
Sub Main()
     Dim c As Range
     c=Target.Offset(0,1).Value    '<----тут он выдает мне ошибку object variable or with block variable not set
     For Each c In Range("A2:D2")
         AddList c, "диап1"
     Next c
End Sub
[/vba]

Автор - yuka
Дата добавления - 20.12.2012 в 14:12
Саня Дата: Четверг, 20.12.2012, 14:27 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
[vba]
Code
set c=Target.Offset(0,1)
[/vba]
 
Ответить
Сообщение[vba]
Code
set c=Target.Offset(0,1)
[/vba]

Автор - Саня
Дата добавления - 20.12.2012 в 14:27
KuklP Дата: Четверг, 20.12.2012, 14:28 | Сообщение № 8
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Правильно выдает. Вы пытаетесь объектной переменной присвоить значение объекта, а не сам объект. Не вникал, но самое простое вместо:
Dim c As Range
сделать:
Dim c


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728


Сообщение отредактировал KuklP - Четверг, 20.12.2012, 14:28
 
Ответить
СообщениеПравильно выдает. Вы пытаетесь объектной переменной присвоить значение объекта, а не сам объект. Не вникал, но самое простое вместо:
Dim c As Range
сделать:
Dim c

Автор - KuklP
Дата добавления - 20.12.2012 в 14:28
KuklP Дата: Четверг, 20.12.2012, 15:37 | Сообщение № 9
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Саш, сейчас только обратил внимание:
[vba]
Code
Sub Main()   
       Dim c As Range   
       c=Target.Offset(0,1).Value   
...
[/vba]
И что такое у ТС тут есть Target? Специально сначала скопировал:)


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728


Сообщение отредактировал KuklP - Четверг, 20.12.2012, 15:39
 
Ответить
СообщениеСаш, сейчас только обратил внимание:
[vba]
Code
Sub Main()   
       Dim c As Range   
       c=Target.Offset(0,1).Value   
...
[/vba]
И что такое у ТС тут есть Target? Специально сначала скопировал:)

Автор - KuklP
Дата добавления - 20.12.2012 в 15:37
yuka Дата: Четверг, 20.12.2012, 16:24 | Сообщение № 10
Группа: Пользователи
Ранг: Участник
Сообщений: 94
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Quote (Саня)
set c=Target.Offset(0,1)

Спасибо большое!

А Target, если я все правильно понимаю активная ячейка. Ее же можно не прописывать в разделе переменных?
 
Ответить
Сообщение
Quote (Саня)
set c=Target.Offset(0,1)

Спасибо большое!

А Target, если я все правильно понимаю активная ячейка. Ее же можно не прописывать в разделе переменных?

Автор - yuka
Дата добавления - 20.12.2012 в 16:24
Саня Дата: Четверг, 20.12.2012, 16:57 | Сообщение № 11
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
[vba]
Code
Sub Main()
     Dim c As Range
     c=Target.Offset(0,1).Value    '<----тут он выдает мне ошибку object variable or with block variable not set
     For Each c In Range("A2:D2")
         AddList c, "диап1"
     Next c
End Sub
[/vba]
в таком виде строка с ошибкой (после исправления) не имеет никакого смысла, потому что конструкция For Each сама определяет переменную c, которая уже и используется в теле цикла.

ActiveCell - активная ячейка
Target - видимо "украдено" из обработчика событий
замени Target на ActiveCell

либо в начале процедуры напиши:
[vba]
Code
dim target as range
set target=ActiveCell
[/vba]
smile
 
Ответить
Сообщение[vba]
Code
Sub Main()
     Dim c As Range
     c=Target.Offset(0,1).Value    '<----тут он выдает мне ошибку object variable or with block variable not set
     For Each c In Range("A2:D2")
         AddList c, "диап1"
     Next c
End Sub
[/vba]
в таком виде строка с ошибкой (после исправления) не имеет никакого смысла, потому что конструкция For Each сама определяет переменную c, которая уже и используется в теле цикла.

ActiveCell - активная ячейка
Target - видимо "украдено" из обработчика событий
замени Target на ActiveCell

либо в начале процедуры напиши:
[vba]
Code
dim target as range
set target=ActiveCell
[/vba]
smile

Автор - Саня
Дата добавления - 20.12.2012 в 16:57
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!