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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2018, 08:59   #1
autostavrroute
Пользователь
 
Регистрация: 07.06.2018
Сообщений: 40
Сообщение Выделение листов по списку

Часто приходится выделять разные наборы листов одинаковые. Их не сложно указать на каком то листе списком. Не получается по этому списку сделать выделение указанных в списке листов. Помогите разобраться.
autostavrroute вне форума Ответить с цитированием
Старый 08.06.2018, 09:05   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Я так удаляю.
Код:
Private Sub DeleteTmpPACKSheets()
    Dim i As Integer
    Dim sCount As Integer
    sCount = Sheets.Count
    i = 1
    For i = 1 To sCount - 1
        With ThisWorkbook.Sheets(i)
            If InStr(.Name, "pack") = 1 And .Name <> "pack_raport" And .Name <> "Pack_temp" Then
                Debug.Print .Name
                Application.DisplayAlerts = False
                .Delete
                Application.DisplayAlerts = True
                sCount = Sheets.Count
            End If
        End With
    Next
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 08.06.2018, 09:25   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Я так удаляю.
Автору темы нужно не удалять, а выделять...

p.s. кстати, в таких случаях, когда в цикле нужно удалять и при этом изменяется количество,
рекомендую использовать цикл от конца к началу. Тогда не нужно корректировать переменную с количеством, всё получается красиво.

Последний раз редактировалось Serge_Bliznykov; 08.06.2018 в 09:27.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.06.2018, 09:52   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub SelectLists()
  Dim Lar:  Lar = Array("Лист1", "Лист3", "Лист5")
  Worksheets(Lar).Select
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 08.06.2018, 10:21   #5
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Автору темы нужно не удалять, а выделять...
трудности перевода вижу выделять, читаю выдалять, делаю удалять.

Интересно, что за нужда такая выделять листы
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 08.06.2018, 10:25   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А что, vba тот sCount - 1 на каждой итерации по-новой вычисляет? Прикольно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.06.2018, 10:36   #7
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Прикольно
Сам в шоке ... Но так как удаляется только 1 лист у меня, то ошибку не бросало.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 08.06.2018, 11:52   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

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

а вот с i - незадача.
после удаления какого-то i-го листа i-м тут же становится следующий, а строка с проверкой удялять его или нет уже пройдена и next увеличивает i еще на 1 ...и, правильно! - лист за удаленным этот код благополучно проскакивает и не проверяет
ну и в конце концов на последних i (если что-то удалялось) ThisWorkbook.Sheets(i) - должен обвалить выполнение макроса по ошибке

и с Sheets нужно быть аккуратнее, потому что листы Диаграмм, Сводных входят в эту коллекцию
и в общем случае Worksheets и Sheets могут содержать разное количество элементов
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 08.06.2018 в 11:57.
IgorGO вне форума Ответить с цитированием
Старый 08.06.2018, 11:58   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Ну вот, это по правильному, а то уже не хорошие мысли по поводу и без него ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.06.2018, 12:32   #10
autostavrroute
Пользователь
 
Регистрация: 07.06.2018
Сообщений: 40
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
Код:
Sub SelectLists()
  Dim Lar:  Lar = Array("Лист1", "Лист3", "Лист5")
  Worksheets(Lar).Select
End Sub
Так работает - только для удобства не в макрасе эти листы прописывать, а брать их названия с определенных ячеек листа в этой книге.
autostavrroute вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выделение нескрытых листов книги Jaroslav Microsoft Office Excel 4 27.05.2014 16:10
VBA - выделение группы листов Tihon Microsoft Office Excel 14 09.01.2013 20:46
Поиск по списку gavrylyuk Microsoft Office Excel 6 25.03.2010 16:24
Загрузка по списку jkpro Работа с сетью в Delphi 23 24.09.2009 17:26
выделение листов по условию Bronyk Microsoft Office Excel 5 11.03.2008 19:40