Страницы: 1
RSS
как научить макрос вставлять выпадающий список???
 
Добрый День!  
есть макрос, который вставляет на лист шапку бланка, одну за другой. как сделать так, чтобы макрос вставлял ячейку с выпадающим списком в этот бланк??? на ум приходит только копирование из первого бланка типа ActiveCell.Offset(2, 1) = cells(2,2), но тогда вставляется и значение первого бланка.... есть каконибудь метод кроме такого копирования?
 
Макрорекордер Вам в помощь.  
У меня так получилось:  
   With ActiveCell.Offset(2, 1).Validation  
       .Delete  
       .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _  
       xlBetween, Formula1:="=$E$1:$E$3"  
       .IgnoreBlank = True  
       .InCellDropdown = True  
       .InputTitle = ""  
       .ErrorTitle = ""  
       .InputMessage = ""  
       .ErrorMessage = ""  
       .ShowInput = True  
       .ShowError = True  
   End With
Bite my shiny metal ass!      
 
Здесь лучше писать именованный диапазон:  
 
xlBetween, Formula1:="=ИМЯ_списка"
 
я пробовал макрорекордером копировать выпадающий список, а вот записать саму процедуру создания не додумался:( спасибо!
 
а как сделать связанные списки???    
пробую сделать как описано в примерах  
 
ActiveCell.Offset(0, 0) = "марка"  
   With ActiveCell.Offset(0, 1).Validation  
       .Delete  
       .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _  
       xlBetween, Formula1:="=$C$1:$E$1"  
       .IgnoreBlank = True  
       .InCellDropdown = True  
       .InputTitle = ""  
       .ErrorTitle = ""  
       .InputMessage = ""  
       .ErrorMessage = ""  
       .ShowInput = True  
       .ShowError = True  
   End With  
ActiveCell.Offset(0, 1) = "тойота"  
ActiveCell.Offset(0, 0) = "модэль"  
Nom = ActiveCell.Offset(0, 1).Address  
   With ActiveCell.Offset(0, 1).Validation  
       .Delete  
       .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _  
       xlBetween, Formula1:="=INDIRECT(R[-1]C)"
       .IgnoreBlank = True  
       .InCellDropdown = True  
       .InputTitle = ""  
       .ErrorTitle = ""  
       .InputMessage = ""  
       .ErrorMessage = ""  
       .ShowInput = True  
       .ShowError = True  
   End With  
 
ругается на строку    
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _  
xlBetween, Formula1:="=INDIRECT(R[-1]C)"
 
ран-тайм эрором 1004 Application-defined or object-defined error
 
ап
 
{quote}{login=}{date=15.10.2009 04:57}{thema=}{post}ап{/post}{/quote}Прям к врачу нельзя сходить...  
Я все равно бы посмотрел тему.  
Если стиль ссылок А1, то параметр Formula1 должен быть вида "=$C$1:$E$1"  
А если R1C1, то ...  
Стало быть, что делаем? Правильно, меняем стиль ссылок.  
 
myReferenceStyle = Application.ReferenceStyle  
Application.ReferenceStyle = xlR1C1  
With ActiveCell.Offset(0, 1).Validation  
.Delete  
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _  
xlBetween, Formula1:="=INDIRECT(R[-1]C)"
.IgnoreBlank = True  
.InCellDropdown = True  
.InputTitle = ""  
.ErrorTitle = ""  
.InputMessage = ""  
.ErrorMessage = ""  
.ShowInput = True  
.ShowError = True  
End With  
Application.ReferenceStyle = myReferenceStyle  
 
 
Ну и первую часть лучше как VovaK советует поправить...
Bite my shiny metal ass!      
 
теперь ругается на .IgnoreBlank = True  
также:(
 
Посмотрите этот пример связанных списков с динамическими диапазонами http://www.planetaexcel.ru/docs/forum_upload/post_68464.xls.
 
{quote}{login=VovaK}{date=15.10.2009 08:13}{thema=}{post}Посмотрите этот пример связанных списков с динамическими диапазонами http://www.planetaexcel.ru/docs/forum_upload/post_68464.xls.{/post}{/quote}  
 
ну список у меня тоже создается, но всплывает ошибка и дальнейшее выполнение макроса останавливается:(  
попробовал удалять строки на которые он ругался, в итоге получилось:  
 
myReferenceStyle = Application.ReferenceStyle  
Application.ReferenceStyle = xlR1C1  
With ActiveCell.Offset(-1, 1).Validation  
.Delete  
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=indirect(R[-1]C)"
.InCellDropdown = True  
End With  
Application.ReferenceStyle = myReferenceStyle  
 
ну с    .InputTitle = ""  
       .ErrorTitle = ""  
       .InputMessage = ""  
       .ErrorMessage = ""  всё понятно.  
а вот параметры .IgnoreBlank .ShowInput .ShowError он какие установит, если они не указаны??? и почему он не ругается на .InCellDropdown = True???
 
Так нравится?
 
нравится, спасибо.  
но и мой вариант работает..... просто не понятно почему он ругался.
 
Чтобы понимать почему ругается, надо понимать что вы написали. Дело в том я не использую Application.ReferenceStyle и понятия не имею как это работает, ну не нужен он был мне до сего времени... Поэтому извиняйте. Код должен быть понятен, прост, рабоспособен, читаем (повторяюсь), ну и добавлю - ничего лишнего. Макрорекодер зачастую пишет не изящные коды, причем одно и тоже действие может записать по разному. Использую только чтобы понять с какой стороны подступиться.
Страницы: 1
Читают тему
Loading...