【问题标题】:Userform Textbox to work like an html textbox用户表单文本框像 html 文本框一样工作
【发布时间】:2016-04-28 14:47:22
【问题描述】:

我正在尝试弄清楚如何让 excel 用户表单中的文本框像 HTML 文本框一样进行更新。例如,如果您将默认值设置为“名字”,然后单击该文本框,它将消失并让您输入。一旦您单击退出,如果您没有输入任何内容,它将返回到默认“名字”。

我发现很多人都在问同样类型的事情,但没有一个对我有用。到目前为止,这是我的代码。

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

在我关闭用户窗体之前,退出子程序不会运行。我也尝试过失去和获得焦点,但完全没有运气。我也尝试过更新前后,但它们只在第一次工作。如果值为“总费用”,我希望每次单击该框时它都会消失。当我离开文本框时,如何获得退出子或类似运行的东西?

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    我尝试将您的代码用于输入和退出,它对我来说适用于测试用户表单。它会正确更新字段,并在您选择文本框时打印“Enter”,当您在用户表单上选择其他内容时打印“Exit”。请注意,要触发退出,您需要将焦点放在用户窗体上的其他内容上。简单地单击其他地方不会从文本框中获得焦点,您必须单击另一个文本框或其他控件。

    我建议使用 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
    

    【讨论】:

    • 我已经能够通过将退出功能更改为 afterupdate 来使其正常工作。我现在遇到的问题是 enter 仅在我第一次单击该框时运行。
    • 这是因为AfterUpdate(和BeforeUpdate)只有在文本框的内容实际发生变化时才会触发。当您的 Enter 事件将值更改为“”时,内容会自动更改。下次输入时,值已经是“”,没有修改。编辑:如果您在文本框中输入内容,退出它,然后删除该条目并再次离开,那么 AfterUpdate 应该再次运行,因为 i) 值已更改,并且 ii) 值为空白。
    • 不完全是,当我打开用户窗体时,它显示“总费用”。我单击它,它会更新为空白以输入。一旦我将其留作其他内容并将其留空,它就会再次更新为“总费用”。但返回后,它会保持为“总费用”而不是空白。
    • 我更新了您的代码并且没有做任何我想要完成的事情,它不会变为空白或在留空时更新为总费用。
    • 我不知道为什么。我有一个带有两个文本框、一个复选框和一个命令按钮的简单用户窗体,上面的代码有效。当我在用户窗体中选择任何其他控件时,它将空白条目更改为“总费用”。你能发布你的整个使用表单/代码吗?您能否确认您在 Enter/Exit 中没有看到我的代码的调试输出?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多