Страницы: 1
RSS
Validation.Add записывается макроредактором, но не работает
 
И снова добрый вечер, товарищи бойцы.  
И снова бесова машина не находит со мной общего языка.  
В общем и целом задача у меня следующая: заполнить некий диапазон листа выпадающими списками. Можно их копировать уже готовые, но мне кажется правильнее создать их через for each.  
Собственно проблема: Записываю я макросом свои действия по созданию ячейки с выпадающим списком и ячейка сама работает, а вот макрос, получившийся при записи - нет. Ни отредактированный, ни в исходной форме.  
Важное добавление: Список значений у меня динамически изменяется.  
Ругается макрос на эту строчку:  
...  
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _  
       xlBetween, Formula1:="=ñìåù(Êîíòðàãåíòû!$A$1;1;0;ñ÷¸òç(Êîíòðàãåíòû!A:A))"  
...  
Собственно вопрос: Что тут не так?  
Заранее благодарю
 
Извините, вот так оно было  
...  
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _  
       xlBetween, Formula1:="=СМЕЩ(Контрагенты!$A$1;1;0;счётз(Контрагенты!A:A))"  
...
 
Формулу пишите в английском варианте, или может быть сработает  
FormulaLocal1:="=СМЕЩ(Контрагенты!$A$1;1;0;счётз(Контрагенты!A:A))"  
Но не уверен.
 
Попробуйте вместо формулы указать именованный диапазон
 
Если Excel до 2010, то в формуле нельзя указывать название листа, даже если это этот лист. И, конечно, формулу надо перевести на родной язык. В 2007 так работает:  
 
       .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _  
       xlBetween, Formula1:="=OFFSET($A$1,1,0,COUNTA(A:A))"
 
Ещё: есть ли перед строкой .Add Type строка .Delete?
 
Добрый вечер и спасибо за оперативность.  
2 Казанский. Excel 2010, так что должно, вроде. Если сам записывает значит сам и должен разобрать, что написал.  
2 Юрий М. Пробую теперь победить именованный диапазон. Да, Delete есть.  
2 Hugo. Спасибо, перевёл на язык Вильяма нашего Шекспира, обозвал это именованным диапазоном, а он мне "N/A", хулиган.
 
Что-то мне кажется, что тут с "машу каслом не испортишь" перебор :)  
Т.е. в имени формулу на английском писать не нужно.
 
У меня вот так работает:  
.Delete  
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Engine"  
где Engine - именованный диапазон.
 
Видимо отпуск сказывается - ничего не сообрежаю.  
С вашего позволения отложу решение до завтра.  
Спасибо всем огромное за участие.  
 
P.S. Перевёл формулу в именованном диапазоне на иностранный - дебагер её пропускает, но спотыкается на Validation.Add, в то время как на русском он говорит, что в формуле - ошибка, Хотя эту же самую формулу я вставляю вручную в проверку данных - всё работает.  
Наверное, это просто день такой и завтра всё будет хорошо.
 
да-с... без файла тяжело идёт
 
Господа, спасибо вам всем за участие.  
Одолел этого негодяя через, действительно, именованный диапазон, которому скормил не формулу, как пытался, а range с начальной ячейки до .End(xlDown).  
Так как список контрагентов обновляется при перезапуске файла - никаких проблем пока не возникает.  
И всё равно странно мне, что VB записывает макрос сам, а потом сам же не может прочитать свои каракули. Прям как я в школе. :-)  
Ещё раз спасибо всем.
Страницы: 1
Читают тему
Наверх