Вот один простой пример, иллюстрирующий концепцию. Как отметил Матье Гиндон в комментарии, вы можете использовать ListBox.Text
.
Предположим, у вас есть следующая пользовательская форма, которая открывается нажатием кнопки «Показать пользовательскую форму». Я предполагаю из вашего вопроса, что вы хотели бы сделать что-то вроде выбора элемента в списке, а затем сделать что-то в коде, когда вы нажимаете кнопку OK. В моем примере, нажав кнопку ОК, вы увидите окно сообщения, в котором будет показан выбранный элемент, но вы, конечно же, можете делать все, что захотите. Код, который генерирует окно сообщения, находится в обычном модуле, а код кнопки «ОК» и «Список» - в форме пользователя.
Кнопка «Показать форму пользователя» просто вызывает следующую подпрограмму в обычном модуле:
Public Sub ShowForm1()
UserForm1.Show
End Sub
Отображает форму пользователя, которая инициализируется следующим кодом:
Private Sub Userform_initialize()
With Me.ListBox1
.AddItem "Item 1"
.AddItem "Item 2"
End With
End Sub
Код ниже для кнопки ОК включает ссылку Me.ListBox1.Text
, которая захватывает выбранный элемент и сохраняет его в переменной, которая затем передается подпрограмме ShowMsgBox
в обычном модуле. Обратите внимание на использование Me.
, которое является сокращением для ссылки на пользовательскую форму, в которой находится список (т.е. ту же форму, что и кнопка OK):
Private Sub okButton_Click()
sSelectedItem = Me.ListBox1.Text
ShowMsgBox (sSelectedItem)
Unload Me
End Sub
Код выше вызывает ShowMsgBox
, который находится в обычном модуле:
Public Sub ShowMsgBox(sInput As String)
MsgBox "You selected " & sInput & ".", vbOKOnly
' Other code to do something with the selected item goes here.
End Sub
Обратите внимание, что в ShowMsgBox()
вы больше не ссылаетесь на список, а работаете со значением sInput
, переданным в качестве аргумента.
Надеюсь, вы найдете это полезным.
EDIT:
После комментария Скай, вот предложение о том, как открыть другие формы вместо окна сообщения. Вы должны заменить одну строку в okButton_Click()
, вот так:
Private Sub okButton_Click()
sSelectedItem = Me.ListBox1.Text
ShowOtherUserForm (sSelectedItem)
Unload Me
End Sub
Затем в обычном модуле добавьте саб ShowOtherUserForm()
. Эта подпрограмма использует Select Case
, чтобы проверить, какой элемент был выбран. Вы можете сделать ту же самую работу с If
, но я предпочитаю стиль Select
для этого сценария. Мой пример требует, чтобы у вас было две пользовательские формы с именами «OtherForm1» и «OtherForm2».
Sub ShowOtherUserForm(sInput As String)
Dim x As Object ' Must be "Object", declare "As UserForm" won't work.
Select Case sInput
Case "Item 1"
Set x = OtherForm1
Case "Item 2"
Set x = OtherForm2
End Select
x.Show
End Sub
Скриншот результата: