Excel VBA中的文本框提示文本

时间:2011-12-15 03:30:15

标签: excel vba textbox

您知道有时您会在输入字段中看到提示答案的文字吗?单击它时,它会消失,但如果取消选择而没有输入任何内容,则会返回。

如何在Excel文本框中完成此操作?这可以完成吗?

我想如果我将一个Click宏附加到文本框并且宏可以告诉单击了哪个文本框,我可以完成此操作,但是点击宏的问题是它不会让你选择对象首先,所以你不知道点击了什么。我不想在点击宏代码中对文本框名称进行硬编码。

3 个答案:

答案 0 :(得分:4)

我认为你指的是UserForm中的“占位符”。我用来实现这一目标的两个技巧是“标记”属性和输入退出事件。首先,创建将在 Enter (焦点)和退出(模糊)时触发的子模块。

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

接下来,对于userform上文本框的每个实例,在View Object模式下双击文本框。这将自动为更改事件创建一个Private Sub。转到工具栏的右上角,将“更改”下拉列表更改为“回车”。这将为 Enter 事件创建一个新的Private Sub。再次重复此过程,但选择“退出”以创建退出事件。现在,只需将以下代码分别复制到 Enter 退出事件中(我使用了第一个文本框的默认名称,但在调用事件时这是独立于名称的)。

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”替换为UserForm的名称。

答案 1 :(得分:0)

你可以用几个事件做到这一点。要点击清除该框非常简单:

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

你需要让它适合你,这样一来,如果你改变标签,它会重置文本,但是你可以让它在激活时检查并改变它以适应你希望它重置的时间。

杰西

答案 2 :(得分:0)

我认为这种类型的适当术语称为“占位符”。这是我在另一个论坛中找到的简单方法。 在文本框的格式属性中,输入:

@;"Your ghost text to disappear"

下图是原作者的帖子截图。 screenshot of original author's post