Userform Textbox像html文本框一样工作

时间:2016-04-28 14:47:23

标签: excel-vba vba excel

我试图找出如何让excel用户表单中的文本框像HTML文本框一样更新。例如,如果您将默认值设置为“First Name”并单击该文本框,它将消失并让您输入。一旦您单击,如果您没有键入任何内容,它将返回到默认“名字”。

我发现很多人都在询问这种类型的东西,但没有一个对我有用。到目前为止,这是我的代码。

Sub QCToolsForm()
QCTools.Show vbModeless
End Sub

Private Sub RUBSTotalExpense_Enter()
Debug.Print "Enter"
If Me.RUBSTotalExpense.Value = "Total Expense" Then
    Me.RUBSTotalExpense.Value = ""
End If
End Sub

Private Sub RUBSTotalExpense_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Debug.Print "Exit"
If Me.RUBSTotalExpense.Value = "" Then
    Me.RUBSTotalExpense.Value = "Total Expense"
End If
End Sub

Private Sub UserForm_Initialize()
updateDefault

End Sub

Public Function updateDefault()

If Me.RUBSTotalExpense.Value = "" Then
    Me.RUBSTotalExpense.Value = "Total Expense"
End If

End Function

在关闭userform之前,exit子程序没有运行。我也尝试过失败和聚焦,但根本没有运气。我之前和之后都尝试过,但他们只是第一次工作。如果值为“Total Expense”,我希望每次单击框中都会消失。当我离开文本框时,如何获得exit sub或类似的东西?

Userform

1 个答案:

答案 0 :(得分:1)

我尝试将您的代码用于Enter和Exit,它为我提供了测试用户表单。它正确地更新字段,并在选择文本框时打印“Enter”,在用户窗体上选择其他内容时打印“退出”。请注意,要触发退出,您需要将焦点放在userform上的其他内容上。只需单击其他位置就不会从文本框中获取焦点,您必须单击另一个文本框或其他控件。

我建议使用Debug.Print准确观察您尝试的每个方法的确切时间,这样您就可以确定代码的运行时间。

Private Sub TextBox1_Enter()
    Debug.Print "Enter"
    If TextBox1.Value = "Total Expense" Then
        TextBox1.Value = ""
    End If
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Debug.Print "Exit"
    If TextBox1.Value = "" Then
        TextBox1.Value = "Total Expense"
    End If
End Sub