непростая (для меня) задача по удалению листов

Программирование на Visual Basic for Applications
poguda
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 01.08.2007 (Ср) 22:43

непростая (для меня) задача по удалению листов

Сообщение poguda » 01.08.2007 (Ср) 22:55

существует книга с листами "итоги", "Лист1", "Лист2"..."лист15". На листе "итоги" в столбец А1..А3 записываются названия некоторых листов, напр. "Лист6", "Лист9", "Лист13". Необходимо, чтобы по нажатию волшебной кнопочки удалились все листы, кроме "итоги", "Лист6", "Лист9", "Лист13". Всем спасибо кто мне поможет!

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 02.08.2007 (Чт) 0:21

Код: Выделить всё
Sub test()
    Dim ws As Worksheet
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For Each ws In ActiveWorkbook.Worksheets
        Select Case LCase(ws.Name)
        Case "итоги", "лист6", "лист9", "лист13"
        Case Else: ws.Delete
        End Select
    Next ws
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub
Привет,
KL

poguda
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 01.08.2007 (Ср) 22:43

Сообщение poguda » 02.08.2007 (Чт) 8:16

спасибо за ответ, но как сделать так, чтобы названия оставляемых листов считывались именно из ячеек А1..А3.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 02.08.2007 (Чт) 9:25

Код: Выделить всё
Sub test()



    Dim ws As Worksheet



    For Each ws In ActiveWorkbook.Worksheets



     If Not Worksheets("Итоги").Range("A1:A3").Find(What:=ws.Name, LookAt:=xlWhole, SearchOrder:=xlByColumns) ws.Delete



    Next ws



End Sub
I don't understand. Sorry.

poguda
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 01.08.2007 (Ср) 22:43

Сообщение poguda » 02.08.2007 (Чт) 10:32

почему-то строка "If Not Worksheets("Итоги").Range("A1:A3").Find(What:=ws.Name, LookAt:=xlWhole, SearchOrder:=xlByColumns) ws.Delete" красная и выдает ошибку "Expected: Then or GoTo"

Krasnaja Shapka
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 87
Зарегистрирован: 26.10.2006 (Чт) 12:13
Откуда: Киев

Сообщение Krasnaja Shapka » 02.08.2007 (Чт) 11:41

он then пропустил перед ws.delete
Если ясность вашего объяснения исключает ложное толкование, все равно кто-то поймет вас неправильно.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 02.08.2007 (Чт) 11:50

Мда, отвык я от VBшного синтаксиса :)
I don't understand. Sorry.

poguda
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 01.08.2007 (Ср) 22:43

Сообщение poguda » 02.08.2007 (Чт) 11:53

я вставил Then, а сейчас пишет Type mismatch

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 02.08.2007 (Чт) 11:57

Совсем отвык от VB, мда.



If Not Worksheets("Итоги").Range("A1:A3").Find(What:=ws.Name, LookAt:=xlWhole, SearchOrder:=xlByColumns) Is Nothing Then ws.Delete
I don't understand. Sorry.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 02.08.2007 (Чт) 11:58

Предвидя следующий вопрос - Application.DisplayAlerts = False перед циклом :)
I don't understand. Sorry.

poguda
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 01.08.2007 (Ср) 22:43

Сообщение poguda » 02.08.2007 (Чт) 12:04

Работает, но наоборот - удаляет нужные листы, оставляя ненужные

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 02.08.2007 (Чт) 12:14

Ну тогда Not убери после If :)
I don't understand. Sorry.

poguda
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 01.08.2007 (Ср) 22:43

Сообщение poguda » 02.08.2007 (Чт) 12:24

после того как убрал If он удаляет еще и "итоги"

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 02.08.2007 (Чт) 12:45

Убери NOT после IF. А не IF!
I don't understand. Sorry.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 02.08.2007 (Чт) 12:46

И да, если лист Итоги не в списке - его тоже удалит :)
I don't understand. Sorry.

poguda
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 01.08.2007 (Ср) 22:43

Сообщение poguda » 02.08.2007 (Чт) 12:54

Спасибо огромное за помощь.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 02.08.2007 (Чт) 13:08

Пожалуйста :)
I don't understand. Sorry.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 70

    TopList