VBA - 使用ESC

时间:2018-06-15 18:13:04

标签: vba textbox exit

我的表单中包含TextBox1CommandButton1

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的静态部分。 我想在两种情况下都获得用户输入。

2 个答案:

答案 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