提问人:Wes 提问时间:12/15/2011 最后编辑:pnutsWes 更新时间:4/18/2021 访问量:24463
Excel VBA中的文本框提示文本
Text box prompt text in Excel VBA
问:
您知道有时您会在输入字段中看到提示答案的文本吗?当您单击它时,它会消失,但如果您取消选择而没有键入任何内容,它就会恢复。
如何在 Excel 文本框中完成此操作?这能做到吗?
我想如果我将单击宏附加到文本框并且宏可以分辨单击了哪个文本框,并且该宏可以分辨出单击了什么文本框,那么我可以完成此操作,但是单击宏的问题在于它不会让您先选择对象,因此您不知道单击了什么。而且我不想在单击宏代码中对文本框名称进行硬编码。
答:
你可以通过几个事件来做到这一点。要清除单击的框非常简单:
Private Sub TextBox1_GotFocus()
TextBox1.Text = ""
End Sub
我会添加一些其他步骤,添加一个worksheet_activate事件来设置初始值,并为是否设置默认值设置一个标志:
Private Sub Worksheet_Activate()
Dim textBox1Default As Boolean
TextBox1.Text = "Please enter some text here"
textBox1Default = True
End Sub
然后,我将添加一个TextBox1_Change事件来删除默认标志
Private Sub TextBox1_Change()
If textBox1Default = True Then textBox1Default = False
End Sub
最后调整原始 GotFocus 事件以包含标志检查:
Private Sub TextBox1_GotFocus()
If textBox1Default Then TextBox1.Text = ""
End Sub
您需要让它为您工作,这样,如果您更改选项卡,它将重置文本,但您可以让它在激活时检查并更改它以适合您希望重置时。
耶西
评论
我认为您指的是用户窗体中的“占位符”。我用来实现此目的的两个技巧是“tag”属性以及 Enter 和 Exit 事件。首先,创建将在 Enter(焦点)和 Exit(模糊)时触发的子模块。
Sub TB_enter(TB_name)
If Len(Me.Controls(TB_name).Tag) = 0 Then
Me.Controls(TB_name).Tag = Me.Controls(TB_name).Value
Me.Controls(TB_name).Value = vbNullString
End If
End Sub
Sub TB_exit(TB_name)
If Len(Me.Controls(TB_name).Value) = 0 Then
Me.Controls(TB_name).Value = Me.Controls(TB_name).Tag
Me.Controls(TB_name).Tag = vbNullString
End If
End Sub
接下来,对于用户窗体上文本框的每个实例,在“查看对象”模式下双击该文本框。这将自动为更改事件创建一个私有子。前往工具栏的右上角,将“更改”下拉列表更改为“Enter”。这将为 Enter 事件创建一个新的 Private Sub。再次重复此过程,但选择“退出”以创建退出事件。现在,只需将以下代码分别复制到 Enter 和 Exit 事件中(我使用了第一个文本框的默认名称,但在调用事件时,这与名称无关)。
Private Sub TextBox1_Enter()
TB_enter ActiveControl.Name
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TB_exit ActiveControl.Name
End Sub
如果要在外部模块中进行这些调用,只需将“Me”替换为用户窗体的名称即可。
评论
我认为这种术语的正确术语称为“占位符”。这是我在另一个论坛中找到的简单方法。 在文本框的 format 属性中,键入以下内容:
@;"Your ghost text to disappear"
评论