Страницы: 1
RSS
Переход на другие листы с помощью пользовательской формы, Оглавление, переход на другие листы.
 
Пользовательская форма для перехода на другие листы.
Код
Option Explicit

Private Sub Lab_Refresh_Click()
    myRefresh
End Sub

Private Sub ListBox1_Click()
    If UserForm_EnableEvents = False Then Exit Sub
    On Error Resume Next
    Sheets(CStr(ListBox1.Value)).Select
End Sub

Private Sub UserForm_Initialize()
    'If UserForm_EnableEvents = False Then Exit Sub
    myRefresh
    
    flagPeriodicalShow = True
'    UserFormPeriodicalShow
End Sub

Private Sub UserForm_Terminate()
    flagPeriodicalShow = False
End Sub

Private Sub myRefresh()
    Dim ii As Long
    UserForm_EnableEvents = False
    
    With Me.ListBox1
        For ii = 1 To .ListCount
            .RemoveItem 0
        Next
    End With
    With ActiveWorkbook
        For ii = 1 To .Sheets.Count
            Me.ListBox1.AddItem .Sheets(ii).Name
            '.Sheets(ii).Name = "sss" & ii
            If .Sheets(ii).Index = ActiveSheet.Index Then
                Me.ListBox1.Selected(ii - 1) = True
            End If
        Next
    End With
    'ii = ii - 1
    If ii > 51 Then ii = 51
    Me.ListBox1.IntegralHeight = False
    Me.ListBox1.Height = 9.7 * ii
    Me.Height = 9.7 * ii + 35


    UserForm_EnableEvents = True
End Sub

Изменено: МатросНаЗебре - 17.08.2022 09:36:04
 
МатросНаЗебре, чем лучше штатного варианта?
Правой Кнопкой Мыши (ПКМ) на стрелочках
Изменено: Jack Famous - 17.08.2022 10:00:43
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Минус один клик на каждый лист. На 10 листах - 10 кликов. Овчинка выделки стоит )
Есть и недостатки. Например, пока работает автообновление этого окна, недоступны стрелки Undo, Redo.
 
МатросНаЗебре,
вообще, если это для того, что я думаю, то мне очень нравиться решение xltools c реализацией аналога alt+tab по листам. Минус - цена...

но если в Вашу затею добавить данную возможность, то это будет гораздо интереснее)))
Изменено: evgeniygeo - 17.08.2022 11:16:24
 
Цитата
МатросНаЗебре: Минус один клик на каждый лист. На 10 листах - 10 кликов
не понял
Чтобы выбрать нужный мне лист штатным способ, нужно нажать ПКМ на стрелочках и выбрать даблкликом нужный лист.
Чтобы выбрать лист вашей формой, нужно вызвать форму и выбрать лист. И иметь эту форму в надстройке или файле, конечно)))
В чём выигрыш?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Выигрыш вижу в том случае, когда нужно часто прыгать меж листами, которые далеко расположены друг от друга (и в книге этих листов куча)
Скажи мне, кудесник, любимец ба’гов...
 
мне кажется вместо этого

Код
    With Me.ListBox1
        For ii = 1 To .ListCount
            .RemoveItem 0
        Next
    End With

можно просто вот так
Код
   Me.ListBox1.Clear

а зачем там таймер? Листы, мне кажется, не удаляются/появляются так часто в файле. Плюс у некоторых людей названия листов имеют длинные названия, возможно надо форму чуть расширять. А так прикольно, может пригодиться людям
Изменено: New - 17.08.2022 20:07:42
 
Цитата
_Boroda_: когда нужно часто прыгать меж листами, которые далеко расположены друг от друга (и в книге этих листов куча)
часто прыгать со штатным инструментом не сложнее, как и искать.
Если бы в форме был поиск и данные были отсортированы, то польза бы была (для количества листов более 20ти, что у меня большая редкость), а пока нет…

Цитата
New: мне кажется вместо этого
и вместо Me.ListBox1.AddItem .Sheets(ii).Name быстрее и проще наполнить массив и присвоить его списку  :idea:
Непонятно также, зачем вычислять и подстраивать размер ListBox под количество элементов, если в нём есть скролл и ещё много чего непонятно…
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Одобряю конструктивную критику. Постараюсь ответить на всё. Забавно, что большая часть ответов сводится к количеству кликов )
Цитата
написал:
а зачем там таймер?
В некоторых версиях, вроде 2013 и выше, при переключении на другую книгу форма исчезает. Таймер нужен, чтоб форма снова появилась. Как я писал выше, недостаток этого появления, не работают клавиши Undo, Redo.

Цитата
написал:
зачем вычислять и подстраивать размер ListBox
Уменьшать, чтоб форма меньше закрывала лист. Вдруг, именно под изменяемой частью находятся данные, на которые хочется посмотреть без лишних кликов.
Увеличивать, чтоб не пролистывать до нужного элемента.

Цитата
написал:
Чтобы выбрать лист вашей формой, нужно вызвать форму и выбрать лист.
Если форму после этого не закрывать, то количество кликов в пересчёте на один лист по прежнему меньше.

Цитата
написал:
Me.ListBox1.Clear
Подозревал, что должно быть что-то такое )
 
Цитата
МатросНаЗебре: при переключении на другую книгу форма исчезает
скорее, скрывается (замещается новым активным окном) и её можно достать через Alt+Tab или кликнув на значок Excel на панели Windows снизу. Программно - можно попробовать перебрать коллекцию Windows
Изменено: Jack Famous - 17.08.2022 12:37:10
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
часто прыгать со штатным инструментом не сложнее
согласен, для меня тоже спорное решение. Например если нужно перейти на конкретный лист, то согласен с Jack Famous, во втором сообщении. если нужно перебирать по порядку, можно CTRL + PageDown в одну сторону и CTRL + PageUp в другую
 
Цитата
Jack Famous написал:
часто прыгать со штатным инструментом не сложнее, как и искать.
Не согласен. На каждый прыжок нужно ПКМ и найти лист. А здесь уже список в уголке висит
Цитата
Jack Famous написал:
если в нём есть скролл
Дык в том и фишка, что без скролла удобнее

Вот только да, таймер я бы убрал. Изменятся листы - ну просто перезапустить форму

Цитата
Jack Famous написал:
для количества листов более 20ти, что у меня большая редкость
У меня тоже. Максимум 5-6. Но часто присылают всякие кошмары на 50-70 листов. Я-то все макросом в одну кучу сваливаю и дальше работаю с ней, а вот когда пояснять нужно - никуда не деться, именно на этом файле нужно показывать начальству, что нам фигню прислали и пусть пересчитывают. А вот здесь удобно, если быстро можно по листам прыгать

Кстати да, вот сортировка, возможно, и неплохо бы там смотрелась. Возможно, по кнопочке - Отсортировать по имени и Отсортировать по расположению
Скажи мне, кудесник, любимец ба’гов...
 
Цитата
_Boroda_: На каждый прыжок нужно ПКМ и найти лист
всегда хватало, но ладно — это по потребности

Цитата
_Boroda_: Дык в том и фишка, что без скролла удобнее
если форма удобна тем, что висит и можно бегать по листам не вызывая каждый раз штатный инструмент (как вы говорите), то её размер не должен быть большим - до 10 значений. При наличии поиска, введя несколько символов легко получить такой список и не нужно менять размер формы.

Цитата
_Boroda_: Возможно, по кнопочке - Отсортировать по имени и Отсортировать по расположению
сортировка по расположению не была нужна ни разу в жизни. Кнопка для сортировки лишняя - сортировать всегда, без учёта регистра и с заменой "ё" на "ея" в массиве значений для сортировки (не для вывода на экран) - для корректной алфавитной сортировки.
Если ОЧЕНЬ надо, то можно прицепить справа к названию листа & Format$(Worksheets().Index,"0000") через какой-нибудь редкий разделитель
Изменено: Jack Famous - 17.08.2022 14:49:24
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Можно еще и таким вариантом поиграться: Список листов книги
Хоть давно его не дорабатывал, работает исправно во всех версиях до сих пор. Но однако перезалил файл надстройки, т.к. старая версия была с закрытыми исходным кодом.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх