Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

skype: aleksandr.gryb
По умолчанию

Я так удаляю.
Код:

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

__________________
Mailto: media.project@ukr.net
Aleksandr H. на форуме   Ответить с цитированием
Старый 08.06.2018, 10:25   #3
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,151
Репутация: 5241
По умолчанию

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

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

Последний раз редактировалось Serge_Bliznykov; 08.06.2018 в 10:27.
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 08.06.2018, 10:52   #4
IgorGO
МегаМодератор
СуперМодератор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Адрес: УКРАЇНА, Київ
Сообщений: 8,930
Репутация: 1648

icq: 7934250
skype: i2x0,5
По умолчанию

Код:

Sub SelectLists()
  Dim Lar:  Lar = Array("Лист1", "Лист3", "Лист5")
  Worksheets(Lar).Select
End Sub

__________________
41001804815208 - Яндекс-деньги благодарности за удачные советы и решения можно отправлять прямо сюда)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума   Ответить с цитированием
Старый 08.06.2018, 11:21   #5
Aleksandr H.
2 the Nation Glory
Профессионал
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Адрес: Wild West Ukraine
Сообщений: 2,418
Репутация: 885

skype: aleksandr.gryb
По умолчанию

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

Интересно, что за нужда такая выделять листы
__________________
Mailto: media.project@ukr.net
Aleksandr H. на форуме   Ответить с цитированием
Старый 08.06.2018, 11:25   #6
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,869
Репутация: 6285
По умолчанию

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

skype: aleksandr.gryb
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Прикольно
Сам в шоке ... Но так как удаляется только 1 лист у меня, то ошибку не бросало.
__________________
Mailto: media.project@ukr.net
Aleksandr H. на форуме   Ответить с цитированием
Старый 08.06.2018, 12:52   #8
IgorGO
МегаМодератор
СуперМодератор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Адрес: УКРАЇНА, Київ
Сообщений: 8,930
Репутация: 1648

icq: 7934250
skype: i2x0,5
По умолчанию

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

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

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

Последний раз редактировалось IgorGO; 08.06.2018 в 12:57.
IgorGO вне форума   Ответить с цитированием
Старый 08.06.2018, 12:58   #9
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,869
Репутация: 6285
По умолчанию

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

Цитата:
Сообщение от IgorGO Посмотреть сообщение
Код:

Sub SelectLists()
  Dim Lar:  Lar = Array("Лист1", "Лист3", "Лист5")
  Worksheets(Lar).Select
End Sub

Так работает - только для удобства не в макрасе эти листы прописывать, а брать их названия с определенных ячеек листа в этой книге.
autostavrroute вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выделение нескрытых листов книги 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 17:24
Загрузка по списку jkpro Работа с сетью в Delphi 23 24.09.2009 17:26
выделение листов по условию Bronyk Microsoft Office Excel 5 11.03.2008 20:40


22:20.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru