Делаю пользовательскую форму. Назначение формы - помочь пользователю составить договор из типовых и нетиповых фраз. Пользователь у меня несобранный... Например, если договор должен состоять из пунктов "родился", "учился", "женился", то мой пользователь запросто может какой-нибудь пропустить.
Для того, чтоы этого не случилось, на одном из листов динамически создаю N ComboBox'ов. N - переменная величина. Каждый элемент ComboBox'а - эта некая типовая фраза (1-3 предложения), который может входить в текст договора.
Если пользователь хочет вставить в договор типовую фразу, то выбирает из имеющихся вариантов ComboBox'а
Если пользователь хочет вставить в договор нетиповую фразу, то вносит свой вариант от руки.
Проблема: Форма у меня достаточно широкая, но 1-3 предложения целиком ни в один ComboBox не влезают. Нужно дать возможность пользователю увидеть весь текст целиком.
Идея: Пользователь выбрал текст в списке (событие Change). Чтобы убедиться, что не промахнулся, навел на Combobox. Появилась подсказка, в которую продублировалось выбранное им значение.
Сложности: Если бы N ComboBox'ов я создавал статически (предварительно), то проблему решили бы N макросов, завязанных на событие Change (поменялся выбор - переопредели текст подсказки). Не понимаю, как быть в динамике...
То ли искать способ на лету под с каждый список создавать макрос с завязкой на событие?
То ли есть способ заранее создать макрос и сказать ему: если списочные поля на этом листе формы изменят свои значения, то переопредели подсказки для них...
[p.s.]Ребят, я понимаю, что решение с подсказками может быть не самым изящным. Наверняка есть что-то более user-friendly. Но это мой первый большой проект, связанный с формами... Считай, учусь на нем. Увы, время ограничено.
Всем привет.
Делаю пользовательскую форму. Назначение формы - помочь пользователю составить договор из типовых и нетиповых фраз. Пользователь у меня несобранный... Например, если договор должен состоять из пунктов "родился", "учился", "женился", то мой пользователь запросто может какой-нибудь пропустить.
Для того, чтоы этого не случилось, на одном из листов динамически создаю N ComboBox'ов. N - переменная величина. Каждый элемент ComboBox'а - эта некая типовая фраза (1-3 предложения), который может входить в текст договора.
Если пользователь хочет вставить в договор типовую фразу, то выбирает из имеющихся вариантов ComboBox'а
Если пользователь хочет вставить в договор нетиповую фразу, то вносит свой вариант от руки.
Проблема: Форма у меня достаточно широкая, но 1-3 предложения целиком ни в один ComboBox не влезают. Нужно дать возможность пользователю увидеть весь текст целиком.
Идея: Пользователь выбрал текст в списке (событие Change). Чтобы убедиться, что не промахнулся, навел на Combobox. Появилась подсказка, в которую продублировалось выбранное им значение.
Сложности: Если бы N ComboBox'ов я создавал статически (предварительно), то проблему решили бы N макросов, завязанных на событие Change (поменялся выбор - переопредели текст подсказки). Не понимаю, как быть в динамике...
То ли искать способ на лету под с каждый список создавать макрос с завязкой на событие?
То ли есть способ заранее создать макрос и сказать ему: если списочные поля на этом листе формы изменят свои значения, то переопредели подсказки для них...
[p.s.]Ребят, я понимаю, что решение с подсказками может быть не самым изящным. Наверняка есть что-то более user-friendly. Но это мой первый большой проект, связанный с формами... Считай, учусь на нем. Увы, время ограничено.alber2jr
Сообщение отредактировал alber2jr - Воскресенье, 03.06.2018, 21:20
alber2jr, я так понимаю, что задача — сборка текста из модулей на выбор? Я бы так предложил — один Комбо и один Текст, три кнопки — ОК, Далее, назад. Идём последовательно от начала к концу, каждый раз в Комбо выводятся подсказки с вариантами выбора, как только юзер выбрал и нажал ОК — в Текст — полный вариант выбранного ОК блокируем, затем если Далее — к следующему блоку, Назад — к предыдущему. И так пока всё не заполним.
alber2jr, я так понимаю, что задача — сборка текста из модулей на выбор? Я бы так предложил — один Комбо и один Текст, три кнопки — ОК, Далее, назад. Идём последовательно от начала к концу, каждый раз в Комбо выводятся подсказки с вариантами выбора, как только юзер выбрал и нажал ОК — в Текст — полный вариант выбранного ОК блокируем, затем если Далее — к следующему блоку, Назад — к предыдущему. И так пока всё не заполним.StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Private Sub UserForm_Initialize() Dim meArr(): meArr = Array("Значение1", "Значение2", "Значение3", "Значение4", "Значение5", "Значение6", "Значение7") Me.ComboBox1.ListWidth = 500 ' установите желаемую ширину выпадающего списка Me.ComboBox1.List = meArr End Sub
Private Sub ComboBox1_Change() Me.ComboBox1.ControlTipText = Me.ComboBox1.Value 'присвойте выбранное значение подсказке Me.Label1.Caption = Me.ComboBox1.Value 'или текстовому полю End Sub
[/vba]
alber2jr, так? [vba]
Код
Private Sub UserForm_Initialize() Dim meArr(): meArr = Array("Значение1", "Значение2", "Значение3", "Значение4", "Значение5", "Значение6", "Значение7") Me.ComboBox1.ListWidth = 500 ' установите желаемую ширину выпадающего списка Me.ComboBox1.List = meArr End Sub
Private Sub ComboBox1_Change() Me.ComboBox1.ControlTipText = Me.ComboBox1.Value 'присвойте выбранное значение подсказке Me.Label1.Caption = Me.ComboBox1.Value 'или текстовому полю End Sub