Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2018, 19:53   #1
autostavrroute
Пользователь
 
Регистрация: 07.06.2018
Сообщений: 40
По умолчанию Удалить столбцы макросом

Цитата:
Private Sub Worksheet_Activate()
Sheets("Report1").Activate
Cells.Select
Sheets(Array("Report1", "Report2", "Report3", "Report4")).Select
Sheets("Report1").Activate
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Sheets("Report1").Select
Range("A1").Select

For i = 1 To 4
Sheets(i).Select
' ActiveWindow.ScrollColumn = 1
' ActiveWindow.ScrollRow = 1
Range("a1").Select
Next

Sheets(1).Select
End Sub
Сделал кнопку на листе - макрос работает.
Тот же код вставил на событие при активации листа - по вылазили ошибки. Подскажите где неточность.
autostavrroute вне форума Ответить с цитированием
Старый 15.10.2018, 20:49   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

о рекурсии что-то слышали?

каждый Sheets(i).Select или .Activate
вызывает срабатывание
Private Sub Worksheet_Activate()
а там внутри снова Sheets(i).Select или .Activate снова срабатывание
Private Sub Worksheet_Activate()
а там внутри снова Sheets(i).Select или .Activate снова срабатывание
Private Sub Worksheet_Activate()
а там внутри снова Sheets(i).Select или .Activate снова срабатывание
Private Sub Worksheet_Activate()
..
продолжать? а Excel не спрашивает, просто продолжает это выполнять
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 15.10.2018, 21:05   #3
autostavrroute
Пользователь
 
Регистрация: 07.06.2018
Сообщений: 40
По умолчанию

Уточню актив листа стоит срабатывание на "Report5" чтобы удалить столбцы на первых 4 листах Report1 Report2 Report3 Report4/
В этом случае должна быть рекурсия или нет?!
autostavrroute вне форума Ответить с цитированием
Старый 15.10.2018, 21:09   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

не должно
но если что-то не работает значит причина в коде, который Вы написали
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 15.10.2018, 22:39   #5
autostavrroute
Пользователь
 
Регистрация: 07.06.2018
Сообщений: 40
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
не должно
но если что-то не работает значит причина в коде, который Вы написали
Тут как раз нужна помощь:
кнопка на листе работает:
Цитата:
Sub Удалить_столбцы()
'
' Удалить_столбцы Макрос

Sheets("Report1").Select
Cells.Select
Sheets(Array("Report1", "Report2", "Report3", "Report4", "Report5")).Select
Sheets("Report1").Activate
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Sheets("Report1").Select
Range("A1").Select

For i = 1 To 5
Sheets(i).Select
' ActiveWindow.ScrollColumn = 1
' ActiveWindow.ScrollRow = 1
Range("a1").Select
Next

Sheets(1).Select

End Sub
Практически тоже самое но срабатывание от 5 листа выдает ошибку:
Цитата:
Private Sub Worksheet_Activate() ' "Report5"
Sheets("Report1").Activate
Cells.Select
Sheets(Array("Report1", "Report2", "Report3", "Report4")).Select
Sheets("Report1").Activate
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Sheets("Report1").Select
Range("A1").Select

For i = 1 To 4
Sheets(i).Select
Range("a1").Select
Next

Sheets(1).Select
End Sub
autostavrroute вне форума Ответить с цитированием
Старый 15.10.2018, 23:41   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

исправляйте пока не начнет работать как задумано

удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 16.10.2018, 01:29   #7
autostavrroute
Пользователь
 
Регистрация: 07.06.2018
Сообщений: 40
По умолчанию

У тески как настроение - то поможет - то путает форум хороших пожеланий)
autostavrroute вне форума Ответить с цитированием
Старый 17.10.2018, 11:05   #8
jillitil
Форумчанин
 
Аватар для jillitil
 
Регистрация: 17.10.2018
Сообщений: 184
По умолчанию

Что вообще предполагается делать?
Выкладывайте документ.

Cells.Select — Это как? Что хочется выделять? Ошибка.

Вообще идея сама непонятна, при выделении листа в других четырёх без спроса происходит удаление данных.

::
Вы используете метод ".Select" в событии листа "activate" — это есть бесконечная рекурсия как сказали выше. Пользуйтесь другим методом.

Последний раз редактировалось jillitil; 17.10.2018 в 11:15.
jillitil вне форума Ответить с цитированием
Старый 18.10.2018, 02:30   #9
autostavrroute
Пользователь
 
Регистрация: 07.06.2018
Сообщений: 40
По умолчанию

Цитата:
Сообщение от jillitil Посмотреть сообщение
Что вообще предполагается делать?

Вообще идея сама непонятна, при выделении листа в других четырёх без спроса происходит удаление данных.

::
Вы используете метод ".Select" в событии листа "activate" — это есть бесконечная рекурсия как сказали выше. Пользуйтесь другим методом.
Задача такая: Есть 10 листов из них 5 вносятся данные из другой таблицы, в других 5 листах идет переработка под нужный вид.
Хранить их необходимости нет обработанные данные копируются в другой документ. Для удобства хотелось сделать чтобы при активации 5 го листа данные в первых 4 уже очищались
autostavrroute вне форума Ответить с цитированием
Старый 18.10.2018, 02:35   #10
autostavrroute
Пользователь
 
Регистрация: 07.06.2018
Сообщений: 40
По умолчанию

Уже для простоты удаляю так:
Sheets("Report1").Range("A:I").Dele te
Sheets("Report2").Range("A:I").Dele te
Sheets("Report3").Range("A:I").Dele te
Sheets("Report4").Range("A:I").Dele te

Хотел еще чтобы после всех действий активной была ячейка например А1 но любой цикл при обработки на действие с 5 листом все время указывает что метод не верный.
autostavrroute вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить НД макросом resembe Microsoft Office Excel 4 20.04.2015 08:49
НЕ МОГУ УДАЛИТЬ СТОЛБЦЫ И СТРОКИ Аслан Абдрахманов Microsoft Office Excel 2 11.02.2014 08:56
Удалить из массива A(N,M) строки и столбцы nuklon712 Помощь студентам 3 19.12.2012 14:09
как выделить столбцы макросом kartol Microsoft Office Excel 11 16.06.2012 17:05
Удалить столбцы из матрицы DarkDeidara Помощь студентам 0 02.12.2010 16:18