Уперся в стену и не могу продвинуться в решении проблемы с полноценным меню в Userform.
Задача: сделать переключение вкладок на вызванной UserForm через нажатие на текст в Label. CommandButton использовать не вариант, т.к. есть обводка вокруг кнопки, которая не выглядит лаконично.
С чем трудности: в одном и том же окне разместить разную информацию и переключаться между через "боковое меню"
Выглядит следующим образом
Скрытый текст
Вкладка номер 1 (Главная) Вкладка номер 2 (Wildberries)
Активная вкладка подсвечивается желтым
Уперся сначала в моменте, каким образом реализоваться переход между вкладками - решил сделать на каждую вкладку userform, чтобы визуально были одинаковыми, но справа в окошке была своя информация.
Далее уперся в закрытие формы, т.к. из любой вкладки может вызываться любая другая, соответственно, нужно прописать несколько выгрузок активных открытых форм.
Код
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False
'Выгружаем форму
Unload 'Дальше не знаю как продолжить
'Загружаем форму (Главная)
Load FormHome
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayAlerts = True
Проблема еще и в том, что в данном случае, мне необходимо переключение из-за большого количества кнопок с действиями, которые не помещаются по итогу на полную форму в одной Userform
После выгрузки формы, кстати, не загружается новая, что очень странно. То есть в коде выше, если я укажу выгружаемую форму как она есть, то новая форма не загрузится.
Пытался еще таким вариантом, но ломается на строчке "FormProga.UserForm.Unload"
Код
Dim FormProga As UserForm
For Each FormProga In ActiveWorkbook.UserForm
FormProga.UserForm.Unload
Next
И еще так
Код
Dim FormProga As UserForm
For Each FormProga In ActiveWorkbook.UserForm
FormProga.Unload.UserForm
Next
Файл пример прикрепить не получилось, я закинул по ссылке на файловый хостинг
x7turist, Здравствуйте. По ссылке ничего нет, она битая ссылка. Зазипуйте архиватором и прикрепите к вашему сообщению файл что была форма полностью со всеми контролами как на скринах и со всеми кодами. К примеру в вашем файле есть вызов процедуры Call Module3.FormaWBOpen а такого Модуля с такой процедурой нет в файле. Не охота Рисовать за вас все контролы на форме. UPD! Ну а в кратце, кто вам мешает использовать нечто такое чтоб не использовать MultiPage?
Код
Option Explicit
' Включаем вкладку "Главная"
Private Sub Label1_Click()
Label9.Visible = True
Label10.Visible = False
End Sub
' Включаем вкладку "Программу отчетов"
Private Sub Label2_Click()
Label9.Visible = False
Label10.Visible = True
End Sub
Private Sub Label9_Click()
MsgBox "Это Главная Страница"
End Sub
Private Sub Label10_Click()
MsgBox "Это Программа отчетов"
End Sub
Private Sub UserForm_Initialize()
Label9.Visible = True
Label10.Visible = False
End Sub
Кидаете Label на Label, скрывает что вам не надо - показываете что вам надо.
Т.к. хэсемь-турыст не предоставил нормального примера, то кое-что минимально сделал за него, чтоб было на чём понять смысл примера. По совету MikeVol используется принцип Скрыть/Отобразить нужную группу контролов при нажатии на надпись в меню. Также используется пример из статьи РАБОТА С МОДУЛЯМИ КЛАССОВ.
testuser написал: Можно использовать фреймы для сего
Можно любой контролл формы использовать. Выше в своём посте я как пример привёл Label. Но мы же не знаем что хочет ТС, молчит он. У tolikt хороший пример тому. Ждём что скажет x7turist
написал: Но мы же не знаем что хочет ТС, молчит он. У tolikt хороший пример тому. Ждём что скажет x7turist
Был за городом, поэтому не мог вовремя ответить, чтобы поддержать тему.
Цитата
написал: По совету MikeVol используется принцип Скрыть/Отобразить нужную группу контролов при нажатии на надпись в меню.Также используется пример из статьи РАБОТА С МОДУЛЯМИ КЛАССОВ .
Видимо, пойду самостоятельно изучать статью, так далеко я еще не заходил в работе с VBA. Спасибо большое за Ваш пример, я с ним ознакомился и он выглядит так, как мне нужно. Попробую разобраться во всем, что там используется.
Цитата
написал: Застрели не понял, чем мультипейдж не устраивает? Вероятно, вы не умеете его готовить?
Скорее всего не умею, потому что как уже выше писал, не забирался так далеко в VBA. Но пример отличный, стало интересно разобраться в Multipage, ведь выглядит очень интересно. Где-то можно почитать подробнее про возможности Multipage? - Буду благодарен за информацию
P.S. Оба варианта в теме мне подходят, спасибо большое всем, кто предложил варианты.
написал: Тут в вашей теме нет не одного примера с использованием MultiPage.
Подумал, что в посте №6 использован был Multipage, но пробежал мельком, полноценно сяду разбираться чуть позже, как раскидаю основные задачи на работе.
В любом случае, благодаря сайту узнал очень многое про VBA и благодарен всем, кто помогает новичкам с решением вопросов и появляющихся проблем.
В примере RAN как раз основа для так называемых "окошек" - MultiPage. Только со скрытыми ярлыками. Если, как оказалось в итоге, турист против MultiPage всё-таки не возражает, то для его задачи MultiPage подходит как раз больше всего. Во всяком случае, его будет удобнее дизайнерить на этапе разработки. Но в любом случае, для кнопок и прочих контролов внутри MultiPage придётся сооружать примерно такую схему с модулем классов, как в примере#4. Хотя нет, не обязательно: можно обойтись простым перечислением процедур для каждой кнопки - так оно будет громоздко, но проще и понятнее.
написал: Застрели не понял, чем мультипейдж не устраивает? Вероятно, вы не умеете его готовить?
Ran, огромное спасибо за пример с Multipage, посидел на выходных, разобрался как он работает и как его можно настроить под мои задачи. В принципе, "меню" на Multipage создать даже проще оказалось, чем прописывать процедуры.
Подкрутил еще туда изменение цвета через .ForeColor, но не уверен, что такой вариант корректный. Хотя, он работает для меня очень хорошо
Код
Private Sub Label11_Click()
Me.MultiPage1.Value = 0
Label12.ForeColor = vbWhite
Label13.ForeColor = vbWhite
Label14.ForeColor = vbWhite
Label15.ForeColor = vbWhite
Label16.ForeColor = vbWhite
Label17.ForeColor = vbWhite
Label11.ForeColor = vbYellow
End Sub
Private Sub Label12_Click()
Me.MultiPage1.Value = 1
Label12.ForeColor = vbYellow
Label13.ForeColor = vbWhite
Label14.ForeColor = vbWhite
Label15.ForeColor = vbWhite
Label16.ForeColor = vbWhite
Label17.ForeColor = vbWhite
Label11.ForeColor = vbWhite
End Sub
Прописываю так в каждом Label (кнопки меню) и по итогу меняется цвет.
Спасибо всем, кто помог мне разобраться в этой интересной штуке!!!