Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2013, 13:49   #1
m9yt
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 108
По умолчанию Заполнение xlValidateList значениями коллеции

Наткнулся на такой код:
Код:
Dim list_month() As Variant
list_month = Array("январь", "февраль", "март", "апрель")
With ThisWorkbook.ActiveSheet.UsedRange.Item(1).Validation
    .Delete
    .Add Type:=xlValidateList, Formula1:=Join(list_month, ",")
End With
В нем формируется список, из которого можно выбрать значение для ячейки.
Как мне изменить код, что можно было сформировать список на основе коллекции?
Т.е.:
Код:
Dim coll As New Collection
coll.Add("январь")
coll.Add("февраль")
With ThisWorkbook.ActiveSheet.UsedRange.Item(1).Validation
    .Delete
    .Add Type:=xlValidateList, Formula1:= 'Что тут?
End With
m9yt вне форума Ответить с цитированием
Старый 18.09.2013, 14:10   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
Sub test()
    Dim coll As New Collection
    coll.Add ("январь")
    coll.Add ("февраль")
    coll.Add ("март")

    For Each Item In coll
        List$ = List$ & "," & Item
    Next

    With Range("a1:a5").Validation
        .Delete
        .Add Type:=xlValidateList, Formula1:=Mid(List$, 2)
    End With
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 18.09.2013, 14:38   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Если наткнулись на код - смотрите не наткнитесь на ошибку при открытии файла с длинным сохранённым списком валидации!
Вдруг там не 12 месяцев, а например список сотрудников... с полными именами-отчествами
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 20.09.2013, 08:40   #4
m9yt
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 108
По умолчанию

EducatedFool, спасибо. Но что делать, если объект коллекции уже содержит запятую? Заменить разделитель? Пробовал ";" - не работает.
m9yt вне форума Ответить с цитированием
Старый 20.09.2013, 08:51   #5
m9yt
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 108
По умолчанию

И еще такой вопрос.
На ячейку повешена проверка действительных чисел. Как можно опередить событие валидации? Т.е. при, допустим, нажатии "Enter" у меня вначале редактируется введенный текст (в зависимости от региональных настроек меняется "." на "," или наоборот), а потом уже вызывается валидация. (Замену символов реализовал).

Worksheet_Change не подходит, т.к. событие валидации обрабатывается раньше.

Также интересует, как запретить вставку в ячейку заранее некорректных данных? Т.е. если в ней есть проверка на дату, и откуда-то вставить строку, то проверка не сработает.

Последний раз редактировалось m9yt; 20.09.2013 в 09:41.
m9yt вне форума Ответить с цитированием
Старый 20.09.2013, 10:26   #6
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Цитата:
Сообщение от m9yt Посмотреть сообщение
Но что делать, если объект коллекции уже содержит запятую? Заменить разделитель? Пробовал ";" - не работает.
Формировать список на листе и давать на него ссылку. Тогда и ограничений на длину строки не будет.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 20.09.2013, 10:29   #7
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Или, раз уж Вы все равно макросом обрабатываете ячейку, используйте комбобокс и реализуйте в нем все свои хотелки по проверке.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 20.09.2013, 11:20   #8
m9yt
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 108
По умолчанию

Цитата:
Сообщение от kuklp Посмотреть сообщение
Или, раз уж Вы все равно макросом обрабатываете ячейку, используйте комбобокс и реализуйте в нем все свои хотелки по проверке.
Лишних элементов добавлять нельзя.
Мне бы просто перехватить процедурку валидации (стандартную, экселевскую, которая срабатывает, когда на ячейку вешается проверка из вкладки "данные")
m9yt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с русскими значениями ubun PHP 12 10.01.2012 21:50
Заполнение xlValidateList значениями массива Miguel Sanchez Microsoft Office Excel 10 25.05.2011 20:15
С++ >> Функции >> Обмен значениями Кирилл Юрьевич Общие вопросы C/C++ 2 08.09.2010 11:03
Заполнение значениями из сводной Branch Microsoft Office Excel 0 12.02.2009 16:20
Заполнение столбца с уникальными значениями автоматически Mary_star SQL, базы данных 7 04.08.2008 17:43