我的表单中包含TextBox1
和CommandButton1
。
Cancel
的{{1}}属性为CommandButton1
。因此,我可以通过True
上的按键关闭表单。
Esc
有一个Exit事件,所以离开此元素时会触发一个事件。在这种情况下,我将打印用户输入和一些静态内容。
TextBox1
现在我在Sub CommandButton1_Click()
Unload Me
End Sub
Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Debug.Print "Textbox1_Exit was fired, content was: " & TextBox1.Value
End Sub
输入一些内容,假设我输入'foo'。
如果我使用TextBox1
关闭表单,则输出将为:
TextBox1_Exit被触发,内容为:foo
问题:
如果我通过CommandButton1
键离开表单,输出将只有:
TextBox1_Exit被触发,内容为:
因此只会打印Esc
的静态部分。
我想在两种情况下都获得用户输入。
答案 0 :(得分:1)
好的,所以这有点棘手 - 因为在使用Userform中的TextBox1.Value
时你无法抓住Esc
,你可以使用Public
字符串变量代替模仿条目进入TextBox
。因此,您需要声明Public
变量,添加TextBox_Change
事件,并添加Userform_Initialize
事件以每次重置字符串:
Public mystring As String
Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub TextBox1_Change()
If Not Len(TextBox1.Value) <= Len(mystring) + 1 Then
mystring = mystring & Right(TextBox1.Value, 1)
Else
If TextBox1.Value <> "" Then
mystring = TextBox1.Value
End If
End If
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Debug.Print "Textbox_Exit was fired, content was: " & mystring
End Sub
Private Sub UserForm_Initialize()
mystring = ""
End Sub
答案 1 :(得分:0)
您可以使用UserForm_QueryClose
事件来捕获UserForm
退出事件并致电TextBox1_Exit
一个:
Option Explicit
Sub CommandButton1_Click()
Unload Me
End Sub
Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Debug.Print "Textbox1_Exit was fired, content was: " & TextBox1.Value
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Dim myVar As MSForms.ReturnBoolean
Me.TextBox1_Exit myVar
End Sub