Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как добавить столбец через макрос?

9.8K
29 июля 2005 года
svyatoslav
9 / / 05.07.2005
Добрый день. Подскажите пожалуйста, как добавить столбец через макрос.
Дело в том, что когда я выбираю в в диалоговом окне слово за которым прикреплена ячейка
[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], получается полный бред.
Выделяется весь лист, а не столбец и удалаются все значения на этом листе.
405
29 июля 2005 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by svyatoslav
Добрый день. Подскажите пожалуйста, как добавить столбец через макрос...



У меня Ваша конструкция

 
Код:
Sheets("итоги").Columns(Sheets("sup").Cells(2, 2).Value).Select
Selection.Insert Shift:=xlToRight

работает нормально (учитывая, конечно, что в ячейке [COLOR=blue]Sheets("sup").Cells(2, 2)[/COLOR] стоит число в диапазоне от 1 до 256).
Поэтому, думаю, надо бы посмотреть на весь код.
275
29 июля 2005 года
pashulka
985 / / 19.09.2004
Давайте всё-таки обойдёмся без Select и переменной No, которая всегда Empty

 
Код:
If Not DialogSheets("d1").Show Then GoTo M100

Worksheets("Итоги").Columns(5).Insert Shift:=xlToRight
9.8K
29 июля 2005 года
svyatoslav
9 / / 05.07.2005
Спасибо [COLOR=orangered]dmitrii[/COLOR]за ответ. Мутил я мутил и в итоге вернулся к своим старым баранам. [COLOR=blue]If DialogSheets("d1").Show = No Then GoTo M100[/COLOR] [COLOR=blue]Worksheets("итоги").Activate[/COLOR] [COLOR=blue] Range("A2:FA2").Select[/COLOR] [COLOR=blue] Selection.Find(What:=Sheets("sup").Cells(Sheets("sup").Cells(2, 2).Value, 3).Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt _[/COLOR] [COLOR=blue] :=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _[/COLOR] [COLOR=blue] False).Select[/COLOR] [COLOR=blue]Sheets("sup").Cells(88, 2).Value = Selection.Column[/COLOR] [COLOR=blue]Columns(Sheets("sup").Cells(88, 2).Value).Select[/COLOR] [COLOR=blue]Selection.Insert Shift:=xlToRight[/COLOR]
Я просто сейчас изменяю зарплату для консультантов и поэтому хочется убрать =ЕСЛИ и т.д., а сделать так чтобы не добавлять каждый месяц столбцы с формулами и делать их коррекцию, а прописать разок макрос, который это будет делать сам. Правда, я все это пишу "коряво". "Pashulka" мне уже не раз говорил, что проще обозначить столбцы и ячейки своими именами и обращаться к ним напрямую, а не через поиск. Но я порой могу забыть, что столбец был озаглавлен и его удалю, после этого макрос конечно же обидится и придется снова вспоминать, что было написано и где ошибка. Поэтому и делаю поиск слов.
275
29 июля 2005 года
pashulka
985 / / 19.09.2004
svyatoslav
Вы несколько исказили общий смысл моих высказываний. Я никогда не отрицал применение поиска и насколько я помню в первой части Вашего макроса я его применял. Что касается имён, то в Вашей рабочей книге ничто не указывало не невозможность наличия нескольких лет, а следовательно и повтора названий месяцев в одной таблице. Именно поэтому я и предложил Вам использовать именованные диапазоны. Что касается возникновения ошибки (вследствии отсутствия нужного имени) то её можно, например, "отловить", проверить есть ли данное имя и т.д. и т.п.
Кстати, если столбец с нужным именем будет отсутствовать, то в [COLOR=red]представленном Вами коде, с использованием метода .Select, это также вызовет ошибку[/COLOR]
405
29 июля 2005 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by svyatoslav
Спасибо [COLOR=orangered]dmitrii[/COLOR]за ответ.


Восстановим справедливость: на Ваш вопрос отвечал не только я, но и pashulka, поэтому, думаю, благодарность за ответ должна быть направлена и в его адрес.

Цитата:
Originally posted by svyatoslav
"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


Цитата:
Originally posted by svyatoslav
Но я порой могу забыть, что столбец был озаглавлен и его удалю ...


Я в таких случаях просто помечаю нужные столбцы цветом фона.

9.8K
30 июля 2005 года
svyatoslav
9 / / 05.07.2005
"Pashulka" извиняюсь, похоже, я не правильно выразился. Просто хотел сказать, что у меня макросы получаются какие-то примитивные, т.е. много лишнего. Побывав на вашем сайте я в этом убедился, но пока еще много не понимаю. В последнем примере .Select я использовал для проверки, выделится ли этот столбец с последующим внесения названия, например "Июль". С другой стороны мне кажется, что если назначить значение столбцу или ячейки в моем случае одинаково, так как я все равно ищу это слово через диалоговое окно и обращаюсь к ячейке в sheets("sup"). Или я не правильно понимаю? Честно говоря, я воспользовался Вашей подсказкой и обозначил ячейки и строки, которые у меня ни куда не переносятся (мерчандайзеры, уволенные консультанты и т.д.), к которым можно обратиться напрямую без поиска. Большое спасибо "Pashulka" и "Dmitrii" Вам за помощь, если нужна какая-то помощь от меня всегда готов помочь.
С уважением, Святослав
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог