VBA Удаляет столбцы на всех листах, где имя листа содержит текст

#excel #vba #contains #worksheet

Вопрос:

Мой опыт программирования очень ограничен, и я немного пытаюсь понять, почему мой код не работает. Я просто захожу на разные форумы и помогаю сайтам сшивать мой код, и у меня есть его части. Код, который у меня есть, копирует все листы в книге и называет его оригинальным именем «_Deal» с помощью этого кода:

 For Each xWs In ThisWorkbook.Sheets  xWs.Copy Before:=Sheets(1)  ActiveSheet.Name = xWs.Name amp; "_Deal" Next  

Затем я попытался добавить этот код, чтобы удалить столбец 7 (G) со всех листов, содержащих «_Deal».:

 For Each xWs In ThisWorkbook.Sheets If InStr(ActiveSheet.Name, "_Deal") lt;gt; 0 Then Columns(7).EntireColumn.Delete Next  

Также попытался заменить «ActiveSheet.Name» с «xWs.Name». В результате, по-видимому, он удаляет столбец 7 на одном листе, содержащем «_Deal», но не все. И я вроде как не понимаю, почему «Для каждого XW в этой рабочей книге.Листы» работает над первым кодом, чтобы фактически скопировать все листы, в то время как во втором он останавливается после выполнения кода на одном листе..

Я иду немного шаг за шагом, но моя конечная цель состоит в том, чтобы 1) Сделать копию всех листов с именем «… _Deal», 2) Удалите столбцы 7-10 (G-J) в копиях (но я решил, что должен просто начать с одного, а затем выяснить, как удалить все четыре столбца позже), 3) Сохраните все листы в новой книге (записал этот код) и, наконец, 4) удалите листы с копиями, содержащие «_Deal» (еще не пробовал эту часть, но надеюсь, что смогу использовать то же самое, что и для столбцов, но просто переключите удалить столбцы-часть с помощью команды удалить лист).

Любая помощь или вклад будут оценены по достоинству 🙂

Комментарии:

1. If InStr(xWs.Name, "_Deal") lt;gt; 0 Then xWs.Columns(7).EntireColumn.Delete — вы всегда должны указывать лист, в противном случае предполагается активный лист, и это не изменится. Кстати, вам не нужны две петли.

2. Оооо, спасибо, в этом есть смысл! Теперь это работает! :D, похоже, не работает, когда я пытаюсь объединить его в один и тот же цикл… Не совсем понимаю, почему. Я думаю, было бы более эффективно иметь его в одном, но на самом деле для меня не проблема держать его в 2 циклах. Это работает, значит, это работает! Спасибо! 😀

3. Обновление: Я изменил xWs на активные таблицы как в InStr, так и перед столбцами. удалите, и, похоже, он работает, сохраняя его в том же цикле сейчас!