Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
19.04.2024, 05:21:02
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Поиск:
Расширенный поиск
Интересные и полезные статьи по работе с Excel и VBA можно найти в разделе
ХИТРОСТИ
33 242
Сообщений в
5 457
Тем от
6 758
Пользователей
Последний пользователь:
Сергей2662
Excel это не сложно
Основные форумы
Полезные решения
Показать только лист, выбранный в оглавлении, остальные скрыть.
Страниц: [
1
]
2
Все
Вниз
« предыдущая тема
следующая тема »
Автор
Тема: Показать только лист, выбранный в оглавлении, остальные скрыть. (Прочитано 45853 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Alex_ST
Постоялец
Репутация: +13/-0
Офлайн
Сообщений: 156
Показать только лист, выбранный в оглавлении, остальные скрыть.
«
:
03.06.2011, 12:19:39 »
Написал макрос, который при клике по гиперссылкам листа ОГЛАВЛЕНИЕ делает видимым выбранный лист и скрывает все остальные. При большом числе листов очень удобно получается не выбранные листы прятать.
Этот-то макрос работает.
Но я решил усовершенствовать - сделать ещё один макрос, который будет в книге сам создавать лист ОГЛАВЛЕНИЕ с гиперссылками на её листы и прописывать на этот лист коды обработки событий.
Народ, знатоки!
Гляньте, пожалуйста те, кто умеет работать с VBProject.VBComponents
Я в макрос Sub ОГЛАВЛЕНИЕ_КНИГИ , формирующий гиперссылки-оглавление листов, пытаюсь внести доработку: если лист с именем ОГЛАВЛЕНИЕ в книге не существует, то такой лист создаётся перед первым листом, а потом на него должен прописаться код VBA для обработки событий.
Если в примере нажать на кнопку "Создать ОГЛАВЛЕНИЕ", то, т.к. имеющийся лист у меня переименован в _ОГЛАВЛЕНИЕ, вызванный из-за этого макрос Sub Create_shContent создаст новый лист с именем ОГЛАВЛЕНИЕ и запишет на него код обработки событий.
При пошаговом проходе Sub Create_shContent , вроде бы работает. Лист создаётся, код на него записывается. Но когда запускаю его, то Ёксель "умирает", предлагая перед смертью отправить сообщение об ошибке мелко-мягким
Может, я неправильно обращаюсь к VBComponents(ActiveSheet.CodeName) - кодовому модулю активного листа?
Или просто пора полный ребут компу устраивать?
Записан
С уважением, Алексей
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
Репутация: +485/-0
Офлайн
Сообщений: 5 831
Re:Показать только лист, выбранный в оглавлении, остальные скрыть.
«
Ответ #1 :
03.06.2011, 14:00:51 »
Алексей, я чуть изменил код. Вынес в отдельные процедуры сам код(будет работать даже из надстройки, если основной код в ней).
А еще изменил в той части, где прописывались сами коды в модуль листа - советую просмотреть изменения и принять к сведению. Возможно тот факт, что Вы обращались к объекту компонента VBA именно тем способом и было причиной ошибки.
Так же я подправил, чтобы Ваш записываемый код вдруг не стал записываться перед строками деклараций(Option Explicit и прочее).
Записан
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:
-
41001332272872
-
R298726502453
Alex_ST
Постоялец
Репутация: +13/-0
Офлайн
Сообщений: 156
Re:Показать только лист, выбранный в оглавлении, остальные скрыть.
«
Ответ #2 :
03.06.2011, 14:26:29 »
Дмитрий, спасибо.
Буду разбираться.
Но первая же попытка создать с вашим кодом новый лист ОГЛАВЛЕНИЕ привела опять к смерти Ёкселя.
Надо полностью перегружаться. Сейчас не могу. Попробую, наверное, дома.
Записан
С уважением, Алексей
Alex_ST
Постоялец
Репутация: +13/-0
Офлайн
Сообщений: 156
Re:Показать только лист, выбранный в оглавлении, остальные скрыть.
«
Ответ #3 :
03.06.2011, 15:04:46 »
За CountOfDeclarationLines + 1 большое спасибо. Не знал как обойти декларации.
А в Sub Go_to_Hyp ошибочка вышла : не (Target As Range), а (Target As Hyperlink)
Ну, это и понятно — привычка.
Записан
С уважением, Алексей
Alex_ST
Постоялец
Репутация: +13/-0
Офлайн
Сообщений: 156
Re:Показать только лист, выбранный в оглавлении, остальные скрыть.
«
Ответ #4 :
03.06.2011, 22:04:42 »
А всё-таки без выноса в отдельный модуль подпрограмм для скрывания/отображения листов получится проще, т.к. без этого модуля созданное в новой книге оглавление работать не будет. А значит придётся и этот модуль программно в новую книгу прописывать...
Поэтому я решил всё-таки прописывать код в создаваемый лист полностью без вызова подпрограмм. Но, естественно, с учётом замечаний Дмитрия.
Кстати, дома Ёксель дохнуть на макросе перестал.
А модуль Create_Content теперь можно вынести в personal.xls или в надстройку и прицепить кнопочку на панели инструментов к макросу Sub ОГЛАВЛЕНИЕ_КНИГИ
Надо бы ещё добавить сортировку листов. Её код есть в модуле, но не используется, т.к. что-то как-то хитро глючит сортировка при скрытых листах.
Записан
С уважением, Алексей
Alex_ST
Постоялец
Репутация: +13/-0
Офлайн
Сообщений: 156
Re:Показать только лист, выбранный в оглавлении, остальные скрыть.
«
Ответ #5 :
07.06.2011, 14:28:35 »
Тут я взялся дополировывать макрос для создания в активной книге листа "<<ОГЛАВЛЕНИЕ>>" с гиперссылками на все её листы.
При выборе гиперссылки на лист из оглавления выбранный лист и "<<ОГЛАВЛЕНИЕ>>" остаются видимыми, а все другие листы скрываются.
При активизации листа "<<ОГЛАВЛЕНИЕ>>" все остальные листы книги скрываются.
На листе "<<ОГЛАВЛЕНИЕ>>" добавлен пункт-гиперссылка "Все листы", позволяющий при его активизации сделать видимыми все листы книги.
При необходимости название создаваемого листа "<<ОГЛАВЛЕНИЕ>>" и адрес ячейки начала оглавления на нём вводятся в первых строках кода процедуры СОЗДАТЬ_ОГЛАВЛЕНИЕ
Код может функционировать самостоятельно как надстройка - создавать листы "<<ОГЛАВЛЕНИЕ>>" в любой активной книге.
Вроде, всё работает как надо.
Только почему-то приходится два раза запускать макрос СОЗДАТЬ_ОГЛАВЛЕНИЕ для создания оглавления в новой книге:
- за первый запуск создаётся лист "<<ОГЛАВЛЕНИЕ>>" и код обработки событий
- за второй - прописываются гиперссылки.
НИЧЕГО НЕ ПОНИМАЮ! Пол-дня бьюсь...
Записан
С уважением, Алексей
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
Репутация: +485/-0
Офлайн
Сообщений: 5 831
Re:Показать только лист, выбранный в оглавлении, остальные скрыть.
«
Ответ #6 :
07.06.2011, 14:39:33 »
Алексей. Ну ведь ячейка для создания списка какая?
Код:
With ActiveWorkbook.Worksheets(shContent)
Set rCell = .Range(sStartCell).Offset(iSht.Index - 1, 0)
Т.е. если листа еще нет, то у нас родительского объекта для With тоже нет. Т.к. ошибка у Вас игнорируется(On Error Resume Next), то Вы и не обнаружили столь досадное недоразумение
Во вложении решение.
Записан
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:
-
41001332272872
-
R298726502453
Alex_ST
Постоялец
Репутация: +13/-0
Офлайн
Сообщений: 156
Re:Показать только лист, выбранный в оглавлении, остальные скрыть.
«
Ответ #7 :
07.06.2011, 15:41:56 »
Что-то у меня комп конкретно заглючил - при запуске и вашего и моего доработанного макроса умирает Ёксель и предлагает пожаловаться в микрософт...
Даже перезагрузка не помогла.
Я свой вариант доделал с вашими указаниями.
Если не затруднит, можете проверить на своём компе?
Записан
С уважением, Алексей
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
Репутация: +485/-0
Офлайн
Сообщений: 5 831
Re:Показать только лист, выбранный в оглавлении, остальные скрыть.
«
Ответ #8 :
07.06.2011, 16:17:50 »
Работает.
Но я на Планете отписал свое мнение, по поводу намеренного игнорирования подобных ошибок.
Записан
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:
-
41001332272872
-
R298726502453
Alex_ST
Постоялец
Репутация: +13/-0
Офлайн
Сообщений: 156
Re:Показать только лист, выбранный в оглавлении, остальные скрыть.
«
Ответ #9 :
07.06.2011, 19:41:07 »
Дмитрий, а у вас на компе в вашем файле Оглавление_автомат.xls код на листе создаётся?
У меня - нет. Лист с гиперссылками создаётся, все листы кроме оглавления скрываются. Но кода на листе нет и поэтому спрятанные листы по гиперссылкам не показываются...
Записан
С уважением, Алексей
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
Репутация: +485/-0
Офлайн
Сообщений: 5 831
Re:Показать только лист, выбранный в оглавлении, остальные скрыть.
«
Ответ #10 :
07.06.2011, 19:52:06 »
Цитата: Alex_ST от 07.06.2011, 19:41:07
Дмитрий, а у вас на компе в вашем файле Оглавление_автомат.xls код на листе создаётся?
У меня - нет. Лист с гиперссылками создаётся, все листы кроме оглавления скрываются. Но кода на листе нет и поэтому спрятанные листы по гиперссылкам не показываются...
У меня все работает. Код создается и все ссылки рабочие.
Записан
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:
-
41001332272872
-
R298726502453
Alex_ST
Постоялец
Репутация: +13/-0
Офлайн
Сообщений: 156
Re:Показать только лист, выбранный в оглавлении, остальные скрыть.
«
Ответ #11 :
07.06.2011, 20:25:14 »
У меня вдруг тоже ваш пример заработал...
…
Правда, код прописался только со второго запуска макроса...
Вот, посмотрите: я внедрил предлагаемый вами метод проверки наличия листа непосредственно в макрос.
При первом запуске макроса создаётся лист с гиперссылками, но без кода. При втором запуске на лист прописывается код... Бред какой-то. Такое впечатление, что коллекция Worksheets после Add не сразу обновляется.
Самое интересное, что если лист с работающим оглавлением удалить, а книгу сохранить, но не закрывать, то новый лист при запуске макроса создаётся уже нормально - со ссылками и с макросом.
А вот если лист удалить, книгу сохранить и закрыть, то после открытия книги макрос полностью отработает только со 2-го раза...
Записан
С уважением, Алексей
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
Репутация: +485/-0
Офлайн
Сообщений: 5 831
Re:Показать только лист, выбранный в оглавлении, остальные скрыть.
«
Ответ #12 :
07.06.2011, 20:48:51 »
Алексей, последний файл тоже нормально работает. Посмотрите, нет ли у Вас перехвата событий при выполеннии макроса, нет ли инициализации каких форм, переменных, процедур. Если никакие посторонние коды не вклиниваются в процесс - виноват Excel. Может стоит переустановить?
Записан
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:
-
41001332272872
-
R298726502453
Alex_ST
Постоялец
Репутация: +13/-0
Офлайн
Сообщений: 156
Re:Показать только лист, выбранный в оглавлении, остальные скрыть.
«
Ответ #13 :
07.06.2011, 21:24:12 »
Добавил
Код:
Application.EnableEvents = False … Application.EnableEvents = True
Вроде, сначала заработало. Но раз на 3-й опять глюкнуло. Наверное, надо и в самом деле Ёксель переставить...
Записан
С уважением, Алексей
Alex_ST
Постоялец
Репутация: +13/-0
Офлайн
Сообщений: 156
Re:Показать только лист, выбранный в оглавлении, остальные скрыть.
«
Ответ #14 :
08.06.2011, 07:47:23 »
Сейчас попробовал свою последнюю версию на работе: Ёксель умирает при попытке прописать код в модуль созданного листа...
А дома всё в порядке. Хотя дома Офис - его близнец, поставленный с того же дистрибутива.
Буду, наверное, Ёксель переставлять...
Записан
С уважением, Алексей
Страниц: [
1
]
2
Все
Вверх
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Правила форума и вопросы по работе форума
-----------------------------
=> ОБЩИЕ ПРАВИЛА ФОРУМА
=> ВОПРОСЫ ПО РАБОТЕ ФОРУМА
-----------------------------
Основные форумы
-----------------------------
=> Вопросы по Excel и VBA
=> PowerQuery, PowerPivot, PowerBI и запросы
=> Вопросы по Word и VBA
=> Вопросы по Outlook и VBA
=> Вопросы по Access и VBA
=> Вопросы по PowerPoint и VBA
=> Вопросы по Office для MAC
=> Вопросы по работе в Google-таблицах
=> Полезные решения
=> Баги и глюки при работе с Excel и VBA
=> Вопросы по OpenOffice и LibreOffice
=> Вопросы по надстройке MulTEx
=> Вопросы по MyAddin
=> Вопросы по бесплатным надстройкам
=> Вопросы по программам
-----------------------------
Прочие форумы
-----------------------------
=> Заказы на написание макросов, работа для специалистов по Excel и VBA и пр.
=> Курилка
-----------------------------
Удаленные темы и сообщения
-----------------------------
=> Список удаленных
Загружается...