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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2011, 14:29   #1
АННА-ЕАО
Форумчанин
 
Аватар для АННА-ЕАО
 
Регистрация: 24.08.2011
Сообщений: 193
Вопрос Нужен макрос для удаления листов из книги, в названиях которых содержится определенный текст.

Всем здравствуйте! В своей работе используем определенную программу из неё мы выгружаем документы в ексель. При выгрузке одного документа в книге ексель создается 8 листов из которых в дальнейшем мы работаем только с двумя из них, а другие удаляем. Но выгружаем мы не по одному документу, а по многу сразу (например 10), таким образом ексель создает книгу с 80 листами. Вручную удалять долго и нудно.

Мне очень помог бы в работе макрос благодаря которому можно было бы удалить листы из книги, в названиях которых содержится определенный текст. Либо удалить все листы, кроме тех которые нужно оставить (так как их меньше).

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

Если не совсем все понятно написала, спрашивайте.

Файл для примера содержит 16 листов т.е. выгружен из 2-х документов. Листы, которые нужно удалить, выделены желтым цветом. Сам текст документов на листах я удалила, чтоб файл весил мало.
Вложения
Тип файла: rar Для примера удалить бы листы.rar (21.4 Кб, 36 просмотров)
АННА-ЕАО вне форума Ответить с цитированием
Старый 01.09.2011, 15:01   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

А как определить, какие листы нужно оставить?
Оставляем те, в названиях которых есть числа 6907 и 630 (в скобках)?
EducatedFool вне форума Ответить с цитированием
Старый 01.09.2011, 15:10   #3
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Код:
Sub Me_Killer()
Dim S_Del As String
S_Del = "СВОД_Изменения ассигнований,МДОУ ЦРР N22,МДОУ ЦРР N2,МДОУ Ц," ' и так далее список на ликвидацию.Либо надо найти что то общее у них
Dim sh As Worksheet
Application.DisplayAlerts = False
For Each sh In ThisWorkbook.Worksheets
If InStr(1, S_Del, sh.Name & ",", vbTextCompare) > 0 Then
sh.Delete
End If
Next
Application.DisplayAlerts = True
End Sub
Или определить,что общее в нужных листах,их в условии прописать на ОСТАВИТЬ
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 01.09.2011, 15:11   #4
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

sub ggg()
Application.displayalerts = False
for i =1 to worksheets.count
if sheets(i).name like "*hhhhh" then sheets(i).delete
next
Application.displayalerts = true
end sub
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 01.09.2011, 15:11   #5
gluk_fm
Форумчанин
 
Аватар для gluk_fm
 
Регистрация: 09.06.2011
Сообщений: 515
По умолчанию

В вложении, просто в цикл (if ....... & end if)так же допишите только те листы которые не нужно удалять.
Вложения
Тип файла: rar Копия Xl0000015.rar (14.3 Кб, 63 просмотров)
gluk_fm вне форума Ответить с цитированием
Старый 01.09.2011, 16:04   #6
АННА-ЕАО
Форумчанин
 
Аватар для АННА-ЕАО
 
Регистрация: 24.08.2011
Сообщений: 193
По умолчанию

Нужно оставить листы в названиях которых содержится текст:

бух.уч.(лимиты)-МДОУ
СВОД_Изменения лимитов

Либо удалить листы в названиях которых содержится текст:

бух.уч.(лимиты) (
Изменения ассигнований
Изменения лимитов
Изменения общий
СВОД_Изменения ассигнова
СВОД_Изменения общий
АННА-ЕАО вне форума Ответить с цитированием
Старый 01.09.2011, 16:52   #7
АННА-ЕАО
Форумчанин
 
Аватар для АННА-ЕАО
 
Регистрация: 24.08.2011
Сообщений: 193
По умолчанию

R Dmitry Воспользовалась Вашим макросом - примером. Вот что у меня получилось:

Sub ggg()
Application.DisplayAlerts = False
For i = 1 To Worksheets.Count
If Sheets(i).Name Like "*Изменения ассигнов*" Then Sheets(i).Delete
If Sheets(i).Name Like "Изменения лимитов*" Then Sheets(i).Delete
If Sheets(i).Name Like "*Изменения общий*" Then Sheets(i).Delete
If Sheets(i).Name Like "*СВОД_Изменения ассигнов*" Then Sheets(i).Delete
If Sheets(i).Name Like "*СВОД_Изменения общий*" Then Sheets(i).Delete
Next
Application.DisplayAlerts = True
End Sub

Это почти работает. Спасибо.
АННА-ЕАО вне форума Ответить с цитированием
Старый 01.09.2011, 17:01   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

If Sheets(i).Name Like "*СВОД_Изменения ассигнов*" Then Sheets(i).Delete
уже лишнее...

Хотя по коду есть подозрение, что неправильно - после удаления листа например 3 по первому совпадению - какой лист будет проверяться на "*Изменения общий*" ?

Если делать тупо так - то вводите переменную-флаг as boolean, которую взводите проверками, потом после всех проверок проверяете статус, по результату этой проверки удаляете, переменную сбрасываете.
И листы удалять нужно с конца
For i = Worksheets.Count To 1 step-1
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 01.09.2011 в 17:07.
Hugo121 вне форума Ответить с цитированием
Старый 01.09.2011, 18:11   #9
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
If Sheets(i).Name Like "*СВОД_Изменения ассигнов*" Then Sheets(i).Delete
уже лишнее...

Хотя по коду есть подозрение, что неправильно - после удаления листа например 3 по первому совпадению - какой лист будет проверяться на "*Изменения общий*" ?

Если делать тупо так - то вводите переменную-флаг as boolean, которую взводите проверками, потом после всех проверок проверяете статус, по результату этой проверки удаляете, переменную сбрасываете.
И листы удалять нужно с конца
For i = Worksheets.Count To 1 step-1
да точно , обратный цикл нужен при индексах.
написал не проверив
Спасибо Игорь.
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 02.09.2011, 08:33   #10
АННА-ЕАО
Форумчанин
 
Аватар для АННА-ЕАО
 
Регистрация: 24.08.2011
Сообщений: 193
По умолчанию

Hugo121 , R Dmitry простите, что встреваю в ваш разговор , но как правельно то все это записать в коде? For i = Worksheets.Count To 1 step-1
АННА-ЕАО вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос удаления пустых ячеек и листов книги sna1 Microsoft Office Excel 2 04.05.2011 20:49
Размер шрифта в названиях листов szs Microsoft Office Excel 0 24.08.2010 11:53
Выборка записей в поле которых содержится значение nuul Lokos БД в Delphi 1 05.08.2010 08:23
поиск в названиях листов с любой ячейки Окоча Юра Microsoft Office Excel 7 21.01.2010 00:34
DOS команда для удаления всех файлов, имена которых содержат цифры Samopal Операционные системы общие вопросы 1 23.12.2008 21:12