Страницы: 1
RSS
Удаление листа при при переходе с него на другой (VBA)
 
Приветствую, друзья!
Задался вот каким вопросом:
Есть файл с моделью данных, периодически на листах со сводной приходится проваливаться в детализацию при клике по ячейке двойным кликом. При этом открывается новый лист с данными, который потом не нужен и его приходится удалять.

Возможно ли написать код, который будет это делать?

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


То есть по сути, должно работать такое условие:
Если на листе в ячейке A1  содержится слово "возвращены"(это слово всегда есть для созданного листа который создается при детализации данных), то при деактивации листа -удалить такой лист.

Заранее благодарен за помощь, пример прикрепляю.
Изменено: Dyroff - 21.08.2019 17:47:08
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Код
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
  Application.DisplayAlerts = False
  Sh.Delete
  Application.DisplayAlerts = True
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, Спасибо. Но так будет удаляться любой лист при его деактивации. А мне нужно чтобы удалялись только те листы, в ячейке А1 у которых есть слово "возвращены".
То есть появился у меня такой лист- я на него зашел, посмотрел, и при уходе с него, он сам удалился. Но для других листов это правило работать не должно.
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
не дочитал до этого((
Код
  If Sh.[a1] = "возвращены" Then Sh.Delete
(а самостоятельно это было никак?)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, да уж начал делать)
Спасибо Вам)
Просто опять попал в ловушку незнания того, что события для листа можно прописывать не только в модуле листа)
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Можно и для всех книг сразу.
Изменено: sokol92 - 21.08.2019 18:34:45
Владимир
 
sokol92, угу, спасибо)
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
На всякий случай выкладываю готовый вариант.
1) Удаляет при переходе листы,в тексте  у которых в ячейке А1 содержится слово "Возвращены"

Код
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
  Application.DisplayAlerts = False
  If Sh.[a1] Like "*Возвращены*" Then Sh.Delete
  Application.DisplayAlerts = True
End Sub


2) При образовании нового листа удаляет из ячейки А1  подпись к образованной таблице

Код
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
 Application.DisplayAlerts = False
  If Sh.[a1] Like "*Возвращены*" Then Sh.[a1].ClearContents
  Application.DisplayAlerts = True
End Sub
Изменено: Dyroff - 03.05.2020 13:48:43
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Цитата
Dyroff написал: события для листа можно прописывать не только в модуле листа
вроде как это из списка событий книги и для аналогичного модуля, т.к. события листа имеет префикс "Worksheet_"
Изменено: Jack Famous - 21.08.2019 20:28:33
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, да я то думал, раз действие с листом- то и событие листа, а значит в модуль листа, а значит  удалится вместе с листом. Ошибался.
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
Страницы: 1
Наверх