в Екселе сделал функцию которая в нужной ячейке создает Список для выбора
[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]
Здравствуйте,
в Екселе сделал функцию которая в нужной ячейке создает Список для выбора
[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
Сообщение отредактировал sonwookong - Суббота, 28.02.2015, 10:43
[offtop]Пока все модераторы отдыхают, осмелюсь пораздавать бесплатные советы, как избежать наказания Великих "Мира сего" за нарушение правил. [/offtop] Приложите Ваш файл-пример с эти кодом и в сообщении код макроса под кнопочку #.
[offtop]Пока все модераторы отдыхают, осмелюсь пораздавать бесплатные советы, как избежать наказания Великих "Мира сего" за нарушение правил. [/offtop] Приложите Ваш файл-пример с эти кодом и в сообщении код макроса под кнопочку #.Manyasha
Оба файла положить в одно место. в файле УБ.Документ...!Настройки!B5 указать существующую директорию. Запуск там-же кнопкой АО. В указанной директории будут созданы файлы. указанный объект смотреть: любой файл!любой лист!D6. пароль на редактирование: if,kjy (шаблон)
P.S. в процедуре fASS есть заремленный кусок кода. там тоже происходит работа с объектом Validation, но уже с другими условиями - тоже не работает. Пока с этим не разбирался, но думаю причина та-же. ---------------------------- Сори, не знал, что имена файлов порежет (((( Файл 2857636 переименовать в УБ.Справочники
Manyasha,
Оба файла положить в одно место. в файле УБ.Документ...!Настройки!B5 указать существующую директорию. Запуск там-же кнопкой АО. В указанной директории будут созданы файлы. указанный объект смотреть: любой файл!любой лист!D6. пароль на редактирование: if,kjy (шаблон)
P.S. в процедуре fASS есть заремленный кусок кода. там тоже происходит работа с объектом Validation, но уже с другими условиями - тоже не работает. Пока с этим не разбирался, но думаю причина та-же. ---------------------------- Сори, не знал, что имена файлов порежет (((( Файл 2857636 переименовать в УБ.Справочникиsonwookong
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]
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]
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
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
Manyasha, я имел ввиду список значений а не значения ячеек.
Поясню: Изначально список МОЛ лежит в отдельной книге "Справочники", для пользователей формируются бланки для заполнения и доступа к файлу Справочники у них нет.
Manyasha, я имел ввиду список значений а не значения ячеек.
Поясню: Изначально список МОЛ лежит в отдельной книге "Справочники", для пользователей формируются бланки для заполнения и доступа к файлу Справочники у них нет.sonwookong