将ActiveX文本框设置为空值后,先前的文本会短暂出现在框中,然后再次消失

问题描述 投票:0回答:2

我已经使用ActiveX TextBox在电子表格上创建了​​一个数据输入表单,它们都与一个提交详细信息按钮和一个清除数据按钮结合在一起,在执行结束时,都将文本框重新设置为空白,以便可以通过该工具的下一个用户。但是,我注意到,在将框设置为“”之后,每次用户选择一个文本框时,当用户继续开始再次填写表格时,先前的输入内容将非常短暂地在文本框中闪烁,然后再次消失。这是一个非常令人沮丧的问题,因为我正努力做到这一点,因此以前的用户详细信息被隐藏了。

我已经搜索了很多关于将文本框设置为空的最佳方法的文章,似乎主要的方法是将.text属性简单地设置为“”,似乎没有人提及这种行为,所以我不知道是什么原因。我的代码非常简单,因为它是即将到来的职业博览会的附带项目,目的是为学生提供一个更好的工具来输入联系方式。

Sub clearForm()
    Worksheets("Student Data").userName.Text = ""
    Worksheets("Student Data").emailAddr.Text = ""
    Worksheets("Student Data").contactNum.Text = ""
    Worksheets("Student Data").Course.Text = ""
    Worksheets("Student Data").gradDate.Text = ""
    Worksheets("Student Data").addComment.Text = ""
End Sub

Sub submitData()

    'Code here that takes users entered data and outputs to hidden and protected sheet    


    'After data copied text boxes are cleared of users information, same as above sub
    Worksheets("Student Data").userName.Text = ""
    Worksheets("Student Data").emailAddr.Text = ""
    Worksheets("Student Data").contactNum.Text = ""
    Worksheets("Student Data").Course.Text = ""
    Worksheets("Student Data").gradDate.Text = ""
    Worksheets("Student Data").addComment.Text = ""

End Sub

预期-文本框中应清除可供下一个用户使用的数据。

实际-文本框是清除的,直到用户选择它们以开始输入数据为止,此时先前的输入短暂地出现在框中,然后再次消失。

excel vba textbox activex
2个回答
0
投票

您可以使用由“空格”组成的相当长字符串,然后用一个“空格”代替它们]

Public Sub clearForm()
    Worksheets("Student Data").userName.Text = "                                " 'vbNullString
    Worksheets("Student Data").userName.Text = vbNullString
End Sub

确保相当长足以覆盖您的文本框

您可以在输入文本框以进行后续输入后立即删除“虚拟/信息性”文本

Public Sub clearForm()
    Worksheets("Student Data").userName.Text = "cleared"
    …. (rest of your code
End Sub

Private Sub userName_GotFocus()
    With Worksheets("Student Data").userName
        If .Text = "cleared" Then .Text = vbNullString
    End With
End Sub

Private Sub emailAddr_GotFocus()
    With Worksheets("Student Data").emailAddr
        If .Text = "cleared" Then .Text = vbNullString
    End With
End Sub

…(对于您所有的文本框,依此类推)


0
投票

这是常见的文本框行为。除非再次选择该文本框,否则更改实际上不会完成。我可以看到,如果其他用户使用它并且输入的数据是机密信息,这将带来不便。经过大量测试之后,我发现的唯一可行的方法是通过使VBA选中并取消选择输入框来清除后触发此闪烁。

Sub textbox1clear()
Dim sel
sel = Selection.Address
Sheet1.TextBox1.Value = ""
Sheet1.TextBox1.Activate
Range(sel).Activate
End Sub

我已经建立了一个选择调用,以使通过按钮调用该子控件时,它(略)更加无缝。但是,如果忽略此选项,并且在运行此子项后未进行选择,则取消选中文本框时,文本将再次闪烁。

还请注意,这应该始终手动调用,如果像我一样从Textbox_LostFocus调用,只要未选择文本框,它将进入连续循环。

这不是一个非常优雅的解决方案,但是如果优先考虑数据保护,那么就可以解决问题。

如果这还不够,那么您可能想选择hide your input altogether

© www.soinside.com 2019 - 2024. All rights reserved.