Excel VBA中的文本框提示文本

你知道有时你会看到input栏中的文字提示回答吗? 当你点击它时,它会消失,但是如果你没有input任何内容,就会取消select。

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

我想我可以做到这一点,如果我附加一个点击macros的文本框,macros可以告诉什么文本框被点击,但点击macros的问题是它不会让你select对象,所以你不知道点击了什么。 我不想在单击macros代码中对文本框名称进行硬编码。

我想你是指UserForm中的“占位符”。 我使用的两个技巧是“标签”属性和“ input”和“ 退出”事件。 首先,创build你的子模块,将在input (焦点)和退出 (模糊)时触发。

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 

接下来,对于用户窗体上的每个文本框实例,在查看对象模式下双击文本框。 这将自动为change事件创build一个Private Sub。 转到工具栏的右上angular,将“更改”下拉列表更改为“Enter”。 这将为Enter事件创build一个新的Private Sub。 重复此过程,但select“退出”创build退出事件。 现在,只需将下面的代码分别复制到EnterExit事件中(我已经使用了第一个文本框的默认名称,但是在调用事件时这个名称是独立的)。

 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”replace为UserForm的名称即可。

你可以做几件事情。 点击清除框很容易:

 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 

你需要让它为你工作,这样,如果你改变标签,它会重置文本,但你可以检查它是否激活,并改变它,以适应你想要重置。

杰西