Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
24.04.2024, 12:50:09

Войти
Хотите поблагодарить участника за дельный совет? Нажмите [Повысить]. Так вы заслуженно поднимите репутацию активному участнику.
33 242 Сообщений в 5 457 Тем от 6 761 Пользователей
Последний пользователь: Halfdoor
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Переключение между большим количеством листов
Страниц: [1]   Вниз
Печать
Автор Тема: Переключение между большим количеством листов  (Прочитано 15699 раз)
0 Пользователей и 1 Гость смотрят эту тему.
manhat10
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 17


Просмотр профиля E-mail
« : 27.03.2012, 16:03:59 »

Excel 2007. В книге около 50 листов. Между ячейками разных листов установлены линки. Через кнопку "влияющие ячейки" перехожу, положим, с 1-го листа на 25-ый. В строке ярлычков листов внизу 1-ый уехал далеко влево. Как можно к нему вернуться без использования Ctrl+PageUp/Down и стрелочек навигации рядом с ярлычками листов? Может есть что-то вроде кнопки Назад? Если для этого нет стандартных настроек, можно ли под это дело создать макрос?
Буду благодарен за любую наводку.
Записан
nilem
Эксперты
Постоялец
*

Репутация: +39/-0
Офлайн Офлайн

Сообщений: 194


Просмотр профиля E-mail
« Ответ #1 : 27.03.2012, 16:41:37 »

Может, так подойдет? - щелкаем правой кнопкой по стрелочкам слева от ярлычков листов и выбираем нужный лист из списка
Записан
manhat10
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 17


Просмотр профиля E-mail
« Ответ #2 : 28.03.2012, 11:05:49 »

Дело в том, что в этом списке помещается 15 листов, а в книге их более 50. Так что этот вариант отпадает.
Записан
ambasad
Пользователь
**

Репутация: +7/-0
Офлайн Офлайн

Сообщений: 98


Просмотр профиля
« Ответ #3 : 28.03.2012, 15:18:39 »

manhat10, может тогда на листах просто сделать ссылки на первый лист?
Записан
manhat10
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 17


Просмотр профиля E-mail
« Ответ #4 : 28.03.2012, 20:18:18 »

Тоже не годится - в этом случае придется делать ссылку не только на первый лист, а на каждый из 50. А такое изменение в листе недопустимо руководством.
Я думал, может есть что-то вроде сокращения Ctrl+X.
Странно, что Микрософт не предусмотрел такой возможности.
Записан
ambasad
Пользователь
**

Репутация: +7/-0
Офлайн Офлайн

Сообщений: 98


Просмотр профиля
« Ответ #5 : 28.03.2012, 23:45:17 »

ну тогда могу предложить такой алгоритм (всё в теории, код не писал)
1. Делаете две глобальных переменных для имён/номеров текущего листа и предыдущего листа
2. Для каждого листа при событии активация листа вызываете процедуру, которая:
 а. имя листа, который был активен перед этим переписывает из переменной "текущий лист" в переменную "предыдущий лист"
 б. имя вновь активированного листа записывает в переменную "текущий лист"
3. Пишете процедуру(макрос), которая активирует лист, который прописан в переменной "предыдущий лист"
4. Вешаете этот макрос на любую удобную комбинацию Ctrl+...

Пока писал посетила мысля, что в переменные можно загонять не имена листов, а сделать переменную типа Worksheet и просто этим переменным присваивать объекты

Попробуйте, если не получится, завтра по свободе набросаю это в коде
Записан
ShAM
Постоялец
***

Репутация: +18/-0
Офлайн Офлайн

Сообщений: 113


Просмотр профиля E-mail
« Ответ #6 : 29.03.2012, 08:09:47 »

Цитировать
в этом случае придется делать ссылку не только на первый лист, а на каждый из 50.
Зачем? Вы же на каждый из 50 листов переходите с 1-го листа, значит, возврат нужен тоже только на 1-ый лист. Или я что-то не понял?
Записан
staniiislav
Постоялец
***

Репутация: +9/-0
Офлайн Офлайн

Сообщений: 103

230231237
Просмотр профиля E-mail
« Ответ #7 : 29.03.2012, 09:00:00 »

Один из вариантов:
сделайте один лист и назовите его "Оглавление". На этом листе сделайте гиперссылки  на все листы. И на всех листах сделайте допустим в ячейки А1 гиперссылку на лист оглавление.
Записан

Единственный способ стать умнее, играть с более умным соперником.
RAN
Эксперты
Старожил
*

Репутация: +43/-0
Офлайн Офлайн

Сообщений: 440



Просмотр профиля E-mail
« Ответ #8 : 29.03.2012, 10:44:00 »

Рисуем форму с листбоксом, в который собираем все листы книги, и оттуда гуляем, как левой задней ноге захочется. ;D
Записан

А что ты умеешь?
Учиться...
alex77755
Постоялец
***

Репутация: +17/-0
Офлайн Офлайн

Сообщений: 160


Просмотр профиля E-mail
« Ответ #9 : 29.03.2012, 14:17:05 »

Цитата
Цитировать
Дело в том, что в этом списке помещается 15 листов
Ну там же рядом кнопка имеется все листы и тогда видно всё
Можешь попробовать такой вариант. Макрос в эта книга создаст меню и процедеры
Потом его можно закомментировать, что бы не гонял каждый раз


Код:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim L
Dim S As Object
Dim FI
Dim ТекстПроцедуры
Dim xlmodule As Workbook 'Object
Set xlmodule = ActiveWorkbook
'удаляем все макросы из Лист1  (других макросов сюда не ложить)
On Error Resume Next
For L = xlmodule.VBProject.VBComponents(1).CodeModule.CountOfLines To 1 Step -1
FI = Left(xlmodule.VBProject.VBComponents(1).CodeModule.Lines(L, 1), 17)
 Debug.Print xlmodule.VBProject.VBComponents(1).CodeModule.Lines(L, 1)
If FI = "Public Sub Налист" Then
 xlmodule.VBProject.VBComponents(1).CodeModule.DeleteLines L, 3
 End If
Next L
Application.CommandBars("Worksheet Menu Bar").Controls("Листы").Delete
Set S = Application.CommandBars("Worksheet Menu Bar")

For Each MB In Application.CommandBars
Debug.Print MB.Name
Next

With Application.CommandBars("Worksheet Menu Bar")

'Создание строки меню Файл
        With .Controls.Add(Type:=msoControlPopup)
                .Caption = "&Листы"
                With .Controls
                        For L = 1 To Sheets.Count
ТекстПроцедуры = "Public Sub Налист" & L & "()" & vbCrLf & "Sheets(" & """" & Sheets(L).Name & """" & ").Select" & vbCrLf & "End sub"
  xlmodule.VBProject.VBComponents(1).CodeModule.AddFromString ТекстПроцедуры
                         With .Add(Type:=msoControlButton)
                        .Caption = Sheets(L).Name
                        .OnAction = "ЭтаКнига.Налист" & L
                     End With
                Next L
                End With
        End With
End With
End Sub
в 2003 будет пункт меню. в 2007 пункт в надстройках
Записан
staniiislav
Постоялец
***

Репутация: +9/-0
Офлайн Офлайн

Сообщений: 103

230231237
Просмотр профиля E-mail
« Ответ #10 : 29.03.2012, 16:24:33 »

Цитата
Цитировать
Дело в том, что в этом списке помещается 15 листов
Ну там же рядом кнопка имеется все листы и тогда видно всё
Можешь попробовать такой вариант. Макрос в эта книга создаст меню и процедеры
Потом его можно закомментировать, что бы не гонял каждый раз


Код:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim L
Dim S As Object
Dim FI
Dim ТекстПроцедуры
Dim xlmodule As Workbook 'Object
Set xlmodule = ActiveWorkbook
'удаляем все макросы из Лист1  (других макросов сюда не ложить)
On Error Resume Next
For L = xlmodule.VBProject.VBComponents(1).CodeModule.CountOfLines To 1 Step -1
FI = Left(xlmodule.VBProject.VBComponents(1).CodeModule.Lines(L, 1), 17)
 Debug.Print xlmodule.VBProject.VBComponents(1).CodeModule.Lines(L, 1)
If FI = "Public Sub Налист" Then
 xlmodule.VBProject.VBComponents(1).CodeModule.DeleteLines L, 3
 End If
Next L
Application.CommandBars("Worksheet Menu Bar").Controls("Листы").Delete
Set S = Application.CommandBars("Worksheet Menu Bar")

For Each MB In Application.CommandBars
Debug.Print MB.Name
Next

With Application.CommandBars("Worksheet Menu Bar")

'Создание строки меню Файл
        With .Controls.Add(Type:=msoControlPopup)
                .Caption = "&Листы"
                With .Controls
                        For L = 1 To Sheets.Count
ТекстПроцедуры = "Public Sub Налист" & L & "()" & vbCrLf & "Sheets(" & """" & Sheets(L).Name & """" & ").Select" & vbCrLf & "End sub"
  xlmodule.VBProject.VBComponents(1).CodeModule.AddFromString ТекстПроцедуры
                         With .Add(Type:=msoControlButton)
                        .Caption = Sheets(L).Name
                        .OnAction = "ЭтаКнига.Налист" & L
                     End With
                Next L
                End With
        End With
End With
End Sub
в 2003 будет пункт меню. в 2007 пункт в надстройках

вы не могли бы пример файлика выложить, а то чет в 2007 офисе в надстройках нечего не появляется
Записан

Единственный способ стать умнее, играть с более умным соперником.
doober
Глобальный модератор
Ветеран
*****

Репутация: +67/-0
Офлайн Офлайн

Сообщений: 634


Просмотр профиля E-mail
« Ответ #11 : 29.03.2012, 16:42:16 »

Буду благодарен за любую наводку.

Даю наводку http://programmersforum.ru/showthread.php?t=148662&highlight=%ED%E0%E2%E8%E3%E0%F6%E8%FF
Записан
alex77755
Постоялец
***

Репутация: +17/-0
Офлайн Офлайн

Сообщений: 160


Просмотр профиля E-mail
« Ответ #12 : 30.03.2012, 20:46:51 »

Да без проблем. Даже сразу в 2007
Записан
staniiislav
Постоялец
***

Репутация: +9/-0
Офлайн Офлайн

Сообщений: 103

230231237
Просмотр профиля E-mail
« Ответ #13 : 02.04.2012, 07:59:19 »

Да без проблем. Даже сразу в 2007
Спасибо большое! Прикольный макрос )))
Записан

Единственный способ стать умнее, играть с более умным соперником.
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru