Sheets("итоги").Columns(Sheets("sup").Cells(2, 2).Value).Select
Selection.Insert Shift:=xlToRight
Как добавить столбец через макрос?
Дело в том, что когда я выбираю в в диалоговом окне слово за которым прикреплена ячейка
[COLOR=blue]If DialogSheets("d1").Show = No Then GoTo M100[/COLOR]
То пытаясь выделить столбец [COLOR=blue]Sheets("итоги").Columns(Sheets("sup").Cells(2, 2).Value).Select[/COLOR]
и добавить другой [COLOR=blue] Selection.Insert Shift:=xlToRight[/COLOR], получается полный бред.
Выделяется весь лист, а не столбец и удалаются все значения на этом листе.
Цитата:
Originally posted by svyatoslav
Добрый день. Подскажите пожалуйста, как добавить столбец через макрос...
Добрый день. Подскажите пожалуйста, как добавить столбец через макрос...
У меня Ваша конструкция
Код:
работает нормально (учитывая, конечно, что в ячейке [COLOR=blue]Sheets("sup").Cells(2, 2)[/COLOR] стоит число в диапазоне от 1 до 256).
Поэтому, думаю, надо бы посмотреть на весь код.
Код:
If Not DialogSheets("d1").Show Then GoTo M100
Worksheets("Итоги").Columns(5).Insert Shift:=xlToRight
Worksheets("Итоги").Columns(5).Insert Shift:=xlToRight
Я просто сейчас изменяю зарплату для консультантов и поэтому хочется убрать =ЕСЛИ и т.д., а сделать так чтобы не добавлять каждый месяц столбцы с формулами и делать их коррекцию, а прописать разок макрос, который это будет делать сам. Правда, я все это пишу "коряво". "Pashulka" мне уже не раз говорил, что проще обозначить столбцы и ячейки своими именами и обращаться к ним напрямую, а не через поиск. Но я порой могу забыть, что столбец был озаглавлен и его удалю, после этого макрос конечно же обидится и придется снова вспоминать, что было написано и где ошибка. Поэтому и делаю поиск слов.
Вы несколько исказили общий смысл моих высказываний. Я никогда не отрицал применение поиска и насколько я помню в первой части Вашего макроса я его применял. Что касается имён, то в Вашей рабочей книге ничто не указывало не невозможность наличия нескольких лет, а следовательно и повтора названий месяцев в одной таблице. Именно поэтому я и предложил Вам использовать именованные диапазоны. Что касается возникновения ошибки (вследствии отсутствия нужного имени) то её можно, например, "отловить", проверить есть ли данное имя и т.д. и т.п.
Кстати, если столбец с нужным именем будет отсутствовать, то в [COLOR=red]представленном Вами коде, с использованием метода .Select, это также вызовет ошибку[/COLOR]
Цитата:
Originally posted by svyatoslav
Спасибо [COLOR=orangered]dmitrii[/COLOR]за ответ.
Спасибо [COLOR=orangered]dmitrii[/COLOR]за ответ.
Восстановим справедливость: на Ваш вопрос отвечал не только я, но и pashulka, поэтому, думаю, благодарность за ответ должна быть направлена и в его адрес.
Цитата:
Originally posted by svyatoslav
"Pashulka" мне уже не раз говорил ...
"Pashulka" мне уже не раз говорил ...
Очень рекомендую к нему прислушаться, причём не только в случае с именованием диапазонов, но и в случае с ограничением в использовании метода [COLOR=blue]Select[/COLOR].
Приведённый Вами фрагмент макроса у меня работает без каких-либо ошибок. Так что причины возникновения ошибок у Вас для меня не понятны.
Пока могу предложить лишь такую модификацию кода:
Код:
Worksheets("итоги").Activate
Set x = Range("A2:FA2").Find(What:=Sheets("sup").Cells(Sheets("sup").Cells(2, 2).Value, 3).Value, _
LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
If Not x Is Nothing Then
Sheets("sup").Cells(88, 2).Value = x.Column
Columns(Sheets("sup").Cells(88, 2).Value).Insert Shift:=xlToRight
End If
Set x = Range("A2:FA2").Find(What:=Sheets("sup").Cells(Sheets("sup").Cells(2, 2).Value, 3).Value, _
LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
If Not x Is Nothing Then
Sheets("sup").Cells(88, 2).Value = x.Column
Columns(Sheets("sup").Cells(88, 2).Value).Insert Shift:=xlToRight
End If
Цитата:
Originally posted by svyatoslav
Но я порой могу забыть, что столбец был озаглавлен и его удалю ...
Но я порой могу забыть, что столбец был озаглавлен и его удалю ...
Я в таких случаях просто помечаю нужные столбцы цветом фона.
С уважением, Святослав