Страницы: 1
RSS
Меню выбора данных в UserForm (без использования Multipage)
 
Всем привет!

Уперся в стену и не могу продвинуться в решении проблемы с полноценным меню в Userform.

Задача: сделать переключение вкладок на вызванной UserForm через нажатие на текст в Label. CommandButton использовать не вариант, т.к. есть обводка вокруг кнопки, которая не выглядит лаконично.

С чем трудности: в одном и том же окне разместить разную информацию и переключаться между через "боковое меню"

Выглядит следующим образом
Скрытый текст


Уперся сначала в моменте, каким образом реализоваться переход между вкладками - решил сделать на каждую вкладку 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

Файл пример прикрепить не получилось, я закинул по ссылке на файловый хостинг

https://dropmefiles.com/HffER

Буду очень признателен, если толкнете меня в нужное русло или поможете решить такую вот задачку.
 
Файл меню пример, в котором есть данная форма
 
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 - 04.08.2023 20:19:16 (Дополнил ответ.)
 
Т.к. хэсемь-турыст не предоставил нормального примера, то кое-что минимально сделал за него, чтоб было на чём понять смысл примера.
По совету MikeVol используется принцип Скрыть/Отобразить нужную группу контролов при нажатии на надпись в меню.
Также используется пример из статьи РАБОТА С МОДУЛЯМИ КЛАССОВ.
 
Можно использовать фреймы для сего
 
Застрели не понял, чем мультипейдж не устраивает? Вероятно, вы не умеете его готовить?
 
Цитата
testuser написал:
Можно использовать фреймы для сего
Можно любой контролл формы использовать. Выше в своём посте я как пример привёл Label. Но мы же не знаем что хочет ТС, молчит он. У tolikt хороший пример тому. Ждём что скажет x7turist
Изменено: MikeVol - 06.08.2023 15:05:37
 
Цитата
написал:
Но мы же не знаем что хочет ТС, молчит он. У  tolikt  хороший пример тому. Ждём что скажет  x7turist
Был за городом, поэтому не мог вовремя ответить, чтобы поддержать тему.

Цитата
написал:
По совету  MikeVol  используется принцип Скрыть/Отобразить нужную группу контролов при нажатии на надпись в меню.Также используется пример из статьи  РАБОТА С МОДУЛЯМИ КЛАССОВ .
Видимо, пойду самостоятельно изучать статью, так далеко я еще не заходил в работе с VBA. Спасибо большое за Ваш пример, я с ним ознакомился и он выглядит так, как мне нужно. Попробую разобраться во всем, что там используется.

Цитата
написал:
Застрели не понял, чем мультипейдж не устраивает? Вероятно, вы не умеете его готовить?
Скорее всего не умею, потому что как уже выше писал, не забирался так далеко в VBA. Но пример отличный, стало интересно разобраться в Multipage, ведь выглядит очень интересно. Где-то можно почитать подробнее про возможности Multipage? - Буду благодарен за информацию


P.S. Оба варианта в теме мне подходят, спасибо большое всем, кто предложил варианты.
 
x7turist, Здравствуйте. Тут в вашей теме нет не одного примера с использованием MultiPage.
Цитата
x7turist написал:
Где-то можно почитать подробнее про возможности Multipage?
- много где, например тут. Удачи.
 
Цитата
написал:
Тут в вашей теме нет не одного примера с использованием MultiPage.
Подумал, что в посте №6 использован был Multipage, но пробежал мельком, полноценно сяду разбираться чуть позже, как раскидаю основные задачи на работе.

В любом случае, благодаря сайту узнал очень многое про VBA и благодарен всем, кто помогает новичкам с решением вопросов и появляющихся проблем.
 
Цитата
MikeVol написал:
Тут в вашей теме нет не одного примера с использованием MultiPage.
Положим, один есть.
 
RAN Приветсвую вас.
Цитата
RAN написал:
один есть.
И где же он? Или я уже слепой и старый.
 
В #6.  :D
 
В примере RAN как раз основа для так называемых "окошек" - MultiPage. Только со скрытыми ярлыками.
Если, как оказалось в итоге, турист против MultiPage всё-таки не возражает, то для его задачи MultiPage подходит как раз больше всего. Во всяком случае, его будет удобнее дизайнерить на этапе разработки. Но в любом случае, для кнопок и прочих контролов внутри MultiPage придётся сооружать примерно такую схему с модулем классов, как в примере #4. Хотя нет, не обязательно: можно обойтись простым перечислением процедур для каждой кнопки - так оно будет громоздко, но проще и понятнее.
Изменено: tolikt - 07.08.2023 22:20:10 (Добавлена запоздалая мысля...)
 
Цитата
написал:
Застрели не понял, чем мультипейдж не устраивает? Вероятно, вы не умеете его готовить?
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 (кнопки меню) и по итогу меняется цвет.

Спасибо всем, кто помог мне разобраться в этой интересной штуке!!!
Изменено: x7turist - 14.08.2023 13:29:39
Страницы: 1
Наверх