Пользовательская форма для перехода на другие листы.
Код
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
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Минус один клик на каждый лист. На 10 листах - 10 кликов. Овчинка выделки стоит ) Есть и недостатки. Например, пока работает автообновление этого окна, недоступны стрелки Undo, Redo.
МатросНаЗебре: Минус один клик на каждый лист. На 10 листах - 10 кликов
не понял Чтобы выбрать нужный мне лист штатным способ, нужно нажать ПКМ на стрелочках и выбрать даблкликом нужный лист. Чтобы выбрать лист вашей формой, нужно вызвать форму и выбрать лист. И иметь эту форму в надстройке или файле, конечно))) В чём выигрыш?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
With Me.ListBox1
For ii = 1 To .ListCount
.RemoveItem 0
Next
End With
можно просто вот так
Код
Me.ListBox1.Clear
а зачем там таймер? Листы, мне кажется, не удаляются/появляются так часто в файле. Плюс у некоторых людей названия листов имеют длинные названия, возможно надо форму чуть расширять. А так прикольно, может пригодиться людям
_Boroda_: когда нужно часто прыгать меж листами, которые далеко расположены друг от друга (и в книге этих листов куча)
часто прыгать со штатным инструментом не сложнее, как и искать. Если бы в форме был поиск и данные были отсортированы, то польза бы была (для количества листов более 20ти, что у меня большая редкость), а пока нет…
и вместо Me.ListBox1.AddItem .Sheets(ii).Name быстрее и проще наполнить массив и присвоить его списку Непонятно также, зачем вычислять и подстраивать размер ListBox под количество элементов, если в нём есть скролл и ещё много чего непонятно…
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Одобряю конструктивную критику. Постараюсь ответить на всё. Забавно, что большая часть ответов сводится к количеству кликов )
Цитата
написал: а зачем там таймер?
В некоторых версиях, вроде 2013 и выше, при переключении на другую книгу форма исчезает. Таймер нужен, чтоб форма снова появилась. Как я писал выше, недостаток этого появления, не работают клавиши Undo, Redo.
Цитата
написал: зачем вычислять и подстраивать размер ListBox
Уменьшать, чтоб форма меньше закрывала лист. Вдруг, именно под изменяемой частью находятся данные, на которые хочется посмотреть без лишних кликов. Увеличивать, чтоб не пролистывать до нужного элемента.
Цитата
написал: Чтобы выбрать лист вашей формой, нужно вызвать форму и выбрать лист.
Если форму после этого не закрывать, то количество кликов в пересчёте на один лист по прежнему меньше.
МатросНаЗебре: при переключении на другую книгу форма исчезает
скорее, скрывается (замещается новым активным окном) и её можно достать через Alt+Tab или кликнув на значок Excel на панели Windows снизу. Программно - можно попробовать перебрать коллекцию Windows
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Jack Famous написал: часто прыгать со штатным инструментом не сложнее
согласен, для меня тоже спорное решение. Например если нужно перейти на конкретный лист, то согласен с Jack Famous, во втором сообщении. если нужно перебирать по порядку, можно CTRL + PageDown в одну сторону и CTRL + PageUp в другую
Вот только да, таймер я бы убрал. Изменятся листы - ну просто перезапустить форму
Цитата
Jack Famous написал: для количества листов более 20ти, что у меня большая редкость
У меня тоже. Максимум 5-6. Но часто присылают всякие кошмары на 50-70 листов. Я-то все макросом в одну кучу сваливаю и дальше работаю с ней, а вот когда пояснять нужно - никуда не деться, именно на этом файле нужно показывать начальству, что нам фигню прислали и пусть пересчитывают. А вот здесь удобно, если быстро можно по листам прыгать
Кстати да, вот сортировка, возможно, и неплохо бы там смотрелась. Возможно, по кнопочке - Отсортировать по имени и Отсортировать по расположению
_Boroda_: Дык в том и фишка, что без скролла удобнее
если форма удобна тем, что висит и можно бегать по листам не вызывая каждый раз штатный инструмент (как вы говорите), то её размер не должен быть большим - до 10 значений. При наличии поиска, введя несколько символов легко получить такой список и не нужно менять размер формы.
Цитата
_Boroda_: Возможно, по кнопочке - Отсортировать по имени и Отсортировать по расположению
сортировка по расположению не была нужна ни разу в жизни. Кнопка для сортировки лишняя - сортировать всегда, без учёта регистра и с заменой "ё" на "ея" в массиве значений для сортировки (не для вывода на экран) - для корректной алфавитной сортировки. Если ОЧЕНЬ надо, то можно прицепить справа к названию листа & Format$(Worksheets().Index,"0000") через какой-нибудь редкий разделитель
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Можно еще и таким вариантом поиграться: Список листов книги Хоть давно его не дорабатывал, работает исправно во всех версиях до сих пор. Но однако перезалил файл надстройки, т.к. старая версия была с закрытыми исходным кодом.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...