Существует пример того, как вы можете передать значение в форму и получить результат обратно.В этом подходе используется объект Scripting.Dictionary
, созданный в стандартной области видимости модуля и переданный в пользовательскую форму для изменения значений.Таким образом, можно отправлять значения по умолчанию в пользовательскую форму и сохранять значения результатов в словаре даже после закрытия и выгрузки пользовательской формы.У вас может быть несколько значений, просто добавьте необходимое количество ключей в словарь, например, oData("property1")
, oData("property2")
и т. Д.
Добавьте в проект стандартный модуль и вставьте в него приведенный ниже код:
Option Explicit
Sub Test()
Dim oData
' Set default value and show form
Set oData = CreateObject("Scripting.Dictionary")
oData("") = "Some default text"
UserForm1.ShowForm oData
' Wait until user close form
Do While IsUserFormLoaded("UserForm1")
DoEvents
Loop
' Output returned value
MsgBox oData("")
End Sub
Function IsUserFormLoaded(UserFormName As String) As Boolean
Dim oUF As Object
For Each oUF In UserForms
If LCase(oUF.Name) = LCase(UserFormName) Then
IsUserFormLoaded = True
Exit Function
End If
Next
End Function
Добавьте в проект модуль пользовательской формы с именем UserForm1
, разместите элементы управления, как показано:
![userform](https://i.stack.imgur.com/pPHRk.png)
И поместите нижекод в модуль пользовательской формы:
Private opData
Public Sub ShowForm(oData)
Set opData = oData
Me.TextBox1.Value = opData("")
Me.Show
End Sub
Private Sub UserForm_Initialize()
If TypeName(opData) <> "Dictionary" Then Set opData = CreateObject("Scripting.Dictionary")
End Sub
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub CommandButton2_Click()
opData("") = Me.TextBox1.Value
Unload Me
End Sub