您知道有时您会在输入字段中看到提示答案的文字吗?单击它时,它会消失,但如果取消选择而没有输入任何内容,则会返回。
如何在Excel文本框中完成此操作?这可以完成吗?
我想如果我将一个Click宏附加到文本框并且宏可以告诉单击了哪个文本框,我可以完成此操作,但是点击宏的问题是它不会让你选择对象首先,所以你不知道点击了什么。我不想在点击宏代码中对文本框名称进行硬编码。
答案 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)