Могу ли я спросить, почему вы хотите, чтобы текст по умолчанию исчезал, когда пользователь изменяет текст, а не после того, как он вводит текстовое поле?
Это не то, чего ожидает большинство пользователей, я думаю, что это будет немного смущать некоторых и не рекомендую.Скорее всего, пользователь попытается удалить старый текст, прежде чем вводить новый текст, создавая дополнительную работу.
Я бы использовал что-то вроде этого:
Const sNameDefault As String = "Your Name Here"
Const sEmailDefault As String = "Your Email Here"
Private Sub UserForm_Initialize()
Me.TextBox1.Text = sNameDefault
Me.TextBox2.Text = sEmailDefault
CommandButton1.SetFocus
End Sub
'// TextBox1 - Name
Private Sub TextBox1_Enter()
With Me.TextBox1
If .Text = sNameDefault Then .Text = vbNullString
End With
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With Me.TextBox1
If .Text = vbNullString Then .Text = sNameDefault
End With
End Sub
'// TextBox2 - Email
Private Sub TextBox2_Enter()
With Me.TextBox2
If .Text = sEmailDefault Then .Text = vbNullString
End With
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With Me.TextBox2
If .Text = vbNullString Then .Text = sEmailDefault
End With
End Sub
Private Sub CommandButton1_Click()
Dim sName As String, sEmail As String
'// Get Name
If Me.TextBox1.Text = sNameDefault Then
sName = vbNullString
Else
sName = Me.TextBox1.Text
End If
'// Get Email
If Me.TextBox2.Text = sEmailDefault Then
sEmail = vbNullString
Else
sEmail = Me.TextBox2.Text
End If
MsgBox ("Your Name: " & sName & vbNewLine & " Your Email:" & sEmail)
Unload Me
End Sub
Приведенный выше пример - просто пользовательская форма сдва текстовых поля и командная кнопка.Нажатие внутри текстового поля очистит текст по умолчанию.Если пользователь ничего не вводит, щелкнув другое текстовое поле или элемент управления, текст по умолчанию будет добавлен обратно.После нажатия кнопки команды код вернется пустым, если текст по умолчанию останется.