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

Вход

Регистрация

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

 

= Мир MS Excel/Объект Validation програмно - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Объект Validation програмно (Макросы/Sub)
Объект Validation програмно
sonwookong Дата: Суббота, 28.02.2015, 09:43 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте,

в Екселе сделал функцию которая в нужной ячейке создает Список для выбора

[vba]
Код
Function fMOL(tCell As Range)
'On Error GoTo ErrHandler
Dim i As Integer
Dim arrZn As String
i = 2
Do Until wbAss.Sheets("ìîë").Cells(i, 1).Value = Empty
arrZn = arrZn & ";" & wbAss.Sheets("ìîë").Cells(i, 1).Value
i = i + 1
Loop
arrZn = Right(arrZn, Len(arrZn) - 1)
With tCell.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=arrZn
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = "Âûáèðàéòå ñâîþ ôàìèëèþ èç ñïèñêà!"
.ShowInput = True
.ShowError = True
End With
ExitHere:
Exit Function
ErrHandler:
MsgBox "Ïðîèçîøëà îøèáêà " & Err.Number & vbNewLine & Err.Description, vbInformation
Resume ExitHere
End Function
[/vba]

Заполнение свойств объекта как обычно содрал с записи макроса.
По факту создается список с одним значением в виде строки из переменной (типа йййй;ффффф;яяяяяя). Если вызвать объект на редактирование "Проверка данных" выпадает ошибка:
Цитата
В выделенном диапазоне определено более одно условия. Удалить.....


Прошу помочь разобраться с проблемой.
[moder]Код надо не под спойлер прятать, а оформлять тегами (кнопка #)[/moder]


Сообщение отредактировал sonwookong - Суббота, 28.02.2015, 10:43
 
Ответить
СообщениеЗдравствуйте,

в Екселе сделал функцию которая в нужной ячейке создает Список для выбора

[vba]
Код
Function fMOL(tCell As Range)
'On Error GoTo ErrHandler
Dim i As Integer
Dim arrZn As String
i = 2
Do Until wbAss.Sheets("ìîë").Cells(i, 1).Value = Empty
arrZn = arrZn & ";" & wbAss.Sheets("ìîë").Cells(i, 1).Value
i = i + 1
Loop
arrZn = Right(arrZn, Len(arrZn) - 1)
With tCell.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=arrZn
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = "Âûáèðàéòå ñâîþ ôàìèëèþ èç ñïèñêà!"
.ShowInput = True
.ShowError = True
End With
ExitHere:
Exit Function
ErrHandler:
MsgBox "Ïðîèçîøëà îøèáêà " & Err.Number & vbNewLine & Err.Description, vbInformation
Resume ExitHere
End Function
[/vba]

Заполнение свойств объекта как обычно содрал с записи макроса.
По факту создается список с одним значением в виде строки из переменной (типа йййй;ффффф;яяяяяя). Если вызвать объект на редактирование "Проверка данных" выпадает ошибка:
Цитата
В выделенном диапазоне определено более одно условия. Удалить.....


Прошу помочь разобраться с проблемой.
[moder]Код надо не под спойлер прятать, а оформлять тегами (кнопка #)[/moder]

Автор - sonwookong
Дата добавления - 28.02.2015 в 09:43
Manyasha Дата: Суббота, 28.02.2015, 10:09 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
[offtop]Пока все модераторы отдыхают, осмелюсь пораздавать бесплатные советы, как избежать наказания Великих "Мира сего" за нарушение правил. :) [/offtop]
Приложите Ваш файл-пример с эти кодом и в сообщении код макроса под кнопочку #.


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщение[offtop]Пока все модераторы отдыхают, осмелюсь пораздавать бесплатные советы, как избежать наказания Великих "Мира сего" за нарушение правил. :) [/offtop]
Приложите Ваш файл-пример с эти кодом и в сообщении код макроса под кнопочку #.

Автор - Manyasha
Дата добавления - 28.02.2015 в 10:09
sonwookong Дата: Суббота, 28.02.2015, 10:35 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Manyasha,

Оба файла положить в одно место. в файле УБ.Документ...!Настройки!B5 указать существующую директорию.
Запуск там-же кнопкой АО.
В указанной директории будут созданы файлы.
указанный объект смотреть: любой файл!любой лист!D6. пароль на редактирование: if,kjy (шаблон)

P.S.
в процедуре fASS есть заремленный кусок кода. там тоже происходит работа с объектом Validation, но уже с другими условиями - тоже не работает. Пока с этим не разбирался, но думаю причина та-же.
----------------------------
Сори, не знал, что имена файлов порежет ((((
Файл 2857636 переименовать в УБ.Справочники
К сообщению приложен файл: 2857636.xlsx (43.5 Kb) · ._v0.1.xlsm (75.4 Kb)


Сообщение отредактировал sonwookong - Суббота, 28.02.2015, 10:39
 
Ответить
СообщениеManyasha,

Оба файла положить в одно место. в файле УБ.Документ...!Настройки!B5 указать существующую директорию.
Запуск там-же кнопкой АО.
В указанной директории будут созданы файлы.
указанный объект смотреть: любой файл!любой лист!D6. пароль на редактирование: if,kjy (шаблон)

P.S.
в процедуре fASS есть заремленный кусок кода. там тоже происходит работа с объектом Validation, но уже с другими условиями - тоже не работает. Пока с этим не разбирался, но думаю причина та-же.
----------------------------
Сори, не знал, что имена файлов порежет ((((
Файл 2857636 переименовать в УБ.Справочники

Автор - sonwookong
Дата добавления - 28.02.2015 в 10:35
Manyasha Дата: Суббота, 28.02.2015, 12:15 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
sonwookong, у меня Ваш макрос не отрабатывает до конца, выдает ошибки. Запустила отдельно функцию fMol, создался список из одной строчки на новом листе. Вручную я могу изменить проверку данных как хочу. Ваша ошибка
В выделенном диапазоне определено более одно условия. Удалить.....
выпадает, если я выделяю не только D6, а например, D4:D6.
Проблему решила так:
На листе Шаблон_АО в файле с макросом выделила шапочку-Проверка данных-очистить все.

Если не поможет, вынесите функцию fMOL в отдельный файл, сделайте макрос, где вызывается эта функция и покажите строчку на которой вылетает Ваша ошибка. Например так:
[vba]
Код
Sub test()
      fMOL (tWB.Sheets(nov_list).Cells(6, 4))
      tWB.Sheets(nov_list).Cells(6, 4).Validation.Delete' Здесь ошибка
End Sub
Function fMOL(tCell As Range)
      '...
End Function
[/vba]
Только все переменные (tWB, nov_list, ...) объявите, а то получается, что Ваш макрос у меня не доходит даже до этой функции, а чтобы ее протестить, приходится вручную прописывать что чем является.

UPD.
Кстати, если изменять правила программно, не важно на каком диапазоне, ошибок нет, т.к. у Вас сначала все очищается:
[vba]
Код
With tCell.Validation
.Delete
[/vba]


ЯД: 410013299366744 WM: R193491431804

Сообщение отредактировал Manyasha - Суббота, 28.02.2015, 12:46
 
Ответить
Сообщениеsonwookong, у меня Ваш макрос не отрабатывает до конца, выдает ошибки. Запустила отдельно функцию fMol, создался список из одной строчки на новом листе. Вручную я могу изменить проверку данных как хочу. Ваша ошибка
В выделенном диапазоне определено более одно условия. Удалить.....
выпадает, если я выделяю не только D6, а например, D4:D6.
Проблему решила так:
На листе Шаблон_АО в файле с макросом выделила шапочку-Проверка данных-очистить все.

Если не поможет, вынесите функцию fMOL в отдельный файл, сделайте макрос, где вызывается эта функция и покажите строчку на которой вылетает Ваша ошибка. Например так:
[vba]
Код
Sub test()
      fMOL (tWB.Sheets(nov_list).Cells(6, 4))
      tWB.Sheets(nov_list).Cells(6, 4).Validation.Delete' Здесь ошибка
End Sub
Function fMOL(tCell As Range)
      '...
End Function
[/vba]
Только все переменные (tWB, nov_list, ...) объявите, а то получается, что Ваш макрос у меня не доходит даже до этой функции, а чтобы ее протестить, приходится вручную прописывать что чем является.

UPD.
Кстати, если изменять правила программно, не важно на каком диапазоне, ошибок нет, т.к. у Вас сначала все очищается:
[vba]
Код
With tCell.Validation
.Delete
[/vba]

Автор - Manyasha
Дата добавления - 28.02.2015 в 12:15
sonwookong Дата: Суббота, 28.02.2015, 17:00 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Спасибо за помощь, в основном с ошибками разобрался

единственное
Запустила отдельно функцию fMol, создался список из одной строчки


как все-таки программно сделать список? постоянно получается список из одной записи со всеми значениями списка ((((
 
Ответить
СообщениеСпасибо за помощь, в основном с ошибками разобрался

единственное
Запустила отдельно функцию fMol, создался список из одной строчки


как все-таки программно сделать список? постоянно получается список из одной записи со всеми значениями списка ((((

Автор - sonwookong
Дата добавления - 28.02.2015 в 17:00
sonwookong Дата: Суббота, 28.02.2015, 17:22 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
В дебагере сравнил свойства Validator с нормальным списком и с однострочным - все свойства идентичны.
 
Ответить
СообщениеВ дебагере сравнил свойства Validator с нормальным списком и с однострочным - все свойства идентичны.

Автор - sonwookong
Дата добавления - 28.02.2015 в 17:22
Manyasha Дата: Суббота, 28.02.2015, 17:28 | Сообщение № 7
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Например так:
[vba]
Код
Sub list_()
       Dim arrList
       rL = Cells(Rows.Count, 1).End(xlUp).Row
       arrList = Range("A2:A" & rL).Address
       With Cells(2, 3).Validation
           .Delete
           .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
           xlBetween, Formula1:="=" & arrList
           .IgnoreBlank = True
           .InCellDropdown = True
       End With
End Sub
[/vba]
К сообщению приложен файл: _list.xlsm (19.3 Kb)


ЯД: 410013299366744 WM: R193491431804

Сообщение отредактировал Manyasha - Суббота, 28.02.2015, 17:29
 
Ответить
СообщениеНапример так:
[vba]
Код
Sub list_()
       Dim arrList
       rL = Cells(Rows.Count, 1).End(xlUp).Row
       arrList = Range("A2:A" & rL).Address
       With Cells(2, 3).Validation
           .Delete
           .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
           xlBetween, Formula1:="=" & arrList
           .IgnoreBlank = True
           .InCellDropdown = True
       End With
End Sub
[/vba]

Автор - Manyasha
Дата добавления - 28.02.2015 в 17:28
sonwookong Дата: Суббота, 28.02.2015, 17:34 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Manyasha,

Видимо так и придется сделать.
А так хотелось список в виде константы запилить (((
 
Ответить
СообщениеManyasha,

Видимо так и придется сделать.
А так хотелось список в виде константы запилить (((

Автор - sonwookong
Дата добавления - 28.02.2015 в 17:34
Manyasha Дата: Суббота, 28.02.2015, 17:43 | Сообщение № 9
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Так у Вас и не было константы
arrZn = arrZn & ";" & wbAss.Sheets("ìîë").Cells(i, 1).Value

Можно так:[vba]
Код
Const arrList As String = "A2:A100"
Sub list_()
     With Cells(2, 3).Validation
         .Delete
         .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
         xlBetween, Formula1:="=" & arrList
         .IgnoreBlank = True
         .InCellDropdown = True
     End With
End Sub
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеТак у Вас и не было константы
arrZn = arrZn & ";" & wbAss.Sheets("ìîë").Cells(i, 1).Value

Можно так:[vba]
Код
Const arrList As String = "A2:A100"
Sub list_()
     With Cells(2, 3).Validation
         .Delete
         .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
         xlBetween, Formula1:="=" & arrList
         .IgnoreBlank = True
         .InCellDropdown = True
     End With
End Sub
[/vba]

Автор - Manyasha
Дата добавления - 28.02.2015 в 17:43
sonwookong Дата: Суббота, 28.02.2015, 17:52 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Manyasha,
я имел ввиду список значений а не значения ячеек.

Поясню:
Изначально список МОЛ лежит в отдельной книге "Справочники", для пользователей формируются бланки для заполнения и доступа к файлу Справочники у них нет.
 
Ответить
СообщениеManyasha,
я имел ввиду список значений а не значения ячеек.

Поясню:
Изначально список МОЛ лежит в отдельной книге "Справочники", для пользователей формируются бланки для заполнения и доступа к файлу Справочники у них нет.

Автор - sonwookong
Дата добавления - 28.02.2015 в 17:52
RAN Дата: Суббота, 28.02.2015, 19:19 | Сообщение № 11
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
   Dim sZn$
        Do Until wbAss.Sheets("мол").Cells(i, 1).Value = Empty
            sZn = sZn & "," & wbAss.Sheets("мол").Cells(i, 1).Value
            i = i + 1
        Loop
        sZn = Mid$(sZn, 2)
[/vba]
Остальное по тексту


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Суббота, 28.02.2015, 19:22
 
Ответить
Сообщение[vba]
Код
   Dim sZn$
        Do Until wbAss.Sheets("мол").Cells(i, 1).Value = Empty
            sZn = sZn & "," & wbAss.Sheets("мол").Cells(i, 1).Value
            i = i + 1
        Loop
        sZn = Mid$(sZn, 2)
[/vba]
Остальное по тексту

Автор - RAN
Дата добавления - 28.02.2015 в 19:19
sonwookong Дата: Суббота, 28.02.2015, 20:55 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
RAN,
УРА!!!
Всем спасибо!!!
тема закрыта.
 
Ответить
СообщениеRAN,
УРА!!!
Всем спасибо!!!
тема закрыта.

Автор - sonwookong
Дата добавления - 28.02.2015 в 20:55
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Объект Validation програмно (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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