首页 文章

将描述添加到Excel VBA表单中的TextBox中,一旦用户开始在其中键入内容,该表单就会消失

提问于
浏览
0

我们有一个包含多个文本框的用户表单,我们希望构建类似于下面链接图像的内容,以显示用户应在每个文本框中输入的内容:

http://d2o0t5hpnwv4c1.cloudfront.net/426_formsBestPractices/comments.png

一旦用户开始键入,“默认”文本将消失(而不是一旦用户将光标“放入”文本框内 .

此外,如果在文本框中没有输入任何内容,则不会提交默认文本,并且将使用空白 .

可以这样做吗?

任何建议将不胜感激 .

2 回答

  • 1

    我可以问一下,一旦用户更改文本而不是一旦他们进入文本框,您希望默认文本消失吗?

    这不是大多数用户所期望的,我认为对某些人来说会有点混乱,不会推荐它 . 在键入新文本创建额外工作之前,用户很可能会尝试删除旧文本 .

    我会用这样的东西:

    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
    

    上面的示例只是一个带有两个文本框和一个命令按钮的用户窗体 . 单击文本框内部将清除默认文本 . 如果用户没有输入任何内容,则单击另一个文本框或控件将导致添加默认文本 . 单击命令按钮后,如果保留默认文本,代码将返回空白 .

  • 2

    对的,这是可能的 :)

    我为你创建了一个样本 . 你可以在这里下载 .

    http://wikisend.com/download/143478/Sample.xlsm

    诀窍是创建2个类似的TextBox并隐藏虚拟TextBox背后的“原始”(“具有默认文本”)

    当您开始输入虚拟对象时,文本实际上将在隐藏的文本框中键入 .

    当您提取值时,只需从第二个文本框中提取值,这样就不会考虑默认数据:)

    希望这可以帮助 .

    Code Used

    Private Sub UserForm_Initialize()
        TextBox1.SelStart = 0
        TextBox1.SelLength = Len(TextBox1.Text)
    End Sub
    
    Private Sub CommandButton1_Click()
        MsgBox TextBox2.Text
    End Sub
    
    Private Sub TextBox1_Change()
        TextBox1.Visible = False
        With TextBox2
            .Text = Replace(TextBox1.Text, "Please enter your name", "")
            .Visible = True
            .SetFocus
            .SelStart = Len(TextBox2.Text)
        End With
    End Sub
    

相关问题