将 ActiveX 文本框设置为空值后,先前的文本会短暂出现在框中,然后再次消失
After setting ActiveX textbox to empty value, previous text briefly appears in box before disappearing again
我使用 ActiveX 文本框在电子表格上创建了一个数据输入表单。这些与提交详细信息按钮和清除数据按钮相结合。执行结束时的两个按钮将文本框设置回空白以供下一个用户重新填充。
将框设置为“”后,当用户开始填写表单时,每次用户选择其中一个文本框时,先前输入的详细信息会短暂地出现在文本框中,然后消失。
这是一个非常令人沮丧的问题,因为我正在尝试隐藏以前的用户详细信息。
我搜索了很多关于将文本框设置为空的最佳方法的文章,似乎主要的方法是将.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 = ""
textbox1clear
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
Sub textbox1clear()
Dim sel
sel = Selection.Address
Sheet1.userName.Activate
Application.SendKeys ("Test ")
Sheet1.userName.Value = ""
Range(sel).Activate
End Sub
预期 - 文本框应清除数据以供下一位用户使用。
实际 - 文本框是透明的,直到用户选择它们开始输入数据,此时先前输入的内容会短暂地出现在框中并再次消失。
这是常见的文本框行为。除非再次 selected 文本框,否则更改实际上并未完成。如果其他用户使用并且输入的数据是机密的,我可以看到这是多么不方便。经过多次测试,我发现解决此问题的唯一可行方法是在清除后通过使 VBA select 和 deselect 成为输入框并使用发送键模拟新用户输入来触发此闪烁。
Sub textbox1clear()
Dim sel
sel = Selection.Address
Sheet1.TextBox1.Activate
Application.Sendkeys(" ")
Sheet1.TextBox1.Value = ""
Range(sel).Activate
End Sub
我内置了一个 selection 调用,如果使用按钮调用子程序,它会(稍微)更加无缝。但是,如果省略此选项并且在此子 运行 之后没有生成 selection,则当文本框被 deselected 时,文本将再次闪烁。
另请注意,这应该始终手动调用,如果它像我一样从 Textbox_LostFocus
调用,只要文本框未被 selected,它就会进入一个连续循环。
这不是一个非常优雅的解决方案,但如果优先考虑数据保护,它就可以解决问题。
如果这还不够,您可能想要 hide your input altogether 如果这是一个选项。
您可以使用由 "spaces" 组成的 相当长的 字符串,然后将它们替换为单个 "space"
Public Sub clearForm()
Worksheets("Student Data").userName.Text = " " 'vbNullString
Worksheets("Student Data").userName.Text = vbNullString
End Sub
确保相当长足以覆盖您的文本框
或
您可以使用 "dummy/informative" 文本在输入文本框后立即删除以进行后续输入
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
…(所有文本框依此类推)
我使用 ActiveX 文本框在电子表格上创建了一个数据输入表单。这些与提交详细信息按钮和清除数据按钮相结合。执行结束时的两个按钮将文本框设置回空白以供下一个用户重新填充。
将框设置为“”后,当用户开始填写表单时,每次用户选择其中一个文本框时,先前输入的详细信息会短暂地出现在文本框中,然后消失。
这是一个非常令人沮丧的问题,因为我正在尝试隐藏以前的用户详细信息。
我搜索了很多关于将文本框设置为空的最佳方法的文章,似乎主要的方法是将.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 = ""
textbox1clear
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
Sub textbox1clear()
Dim sel
sel = Selection.Address
Sheet1.userName.Activate
Application.SendKeys ("Test ")
Sheet1.userName.Value = ""
Range(sel).Activate
End Sub
预期 - 文本框应清除数据以供下一位用户使用。
实际 - 文本框是透明的,直到用户选择它们开始输入数据,此时先前输入的内容会短暂地出现在框中并再次消失。
这是常见的文本框行为。除非再次 selected 文本框,否则更改实际上并未完成。如果其他用户使用并且输入的数据是机密的,我可以看到这是多么不方便。经过多次测试,我发现解决此问题的唯一可行方法是在清除后通过使 VBA select 和 deselect 成为输入框并使用发送键模拟新用户输入来触发此闪烁。
Sub textbox1clear()
Dim sel
sel = Selection.Address
Sheet1.TextBox1.Activate
Application.Sendkeys(" ")
Sheet1.TextBox1.Value = ""
Range(sel).Activate
End Sub
我内置了一个 selection 调用,如果使用按钮调用子程序,它会(稍微)更加无缝。但是,如果省略此选项并且在此子 运行 之后没有生成 selection,则当文本框被 deselected 时,文本将再次闪烁。
另请注意,这应该始终手动调用,如果它像我一样从 Textbox_LostFocus
调用,只要文本框未被 selected,它就会进入一个连续循环。
这不是一个非常优雅的解决方案,但如果优先考虑数据保护,它就可以解决问题。
如果这还不够,您可能想要 hide your input altogether 如果这是一个选项。
您可以使用由 "spaces" 组成的 相当长的 字符串,然后将它们替换为单个 "space"
Public Sub clearForm()
Worksheets("Student Data").userName.Text = " " 'vbNullString
Worksheets("Student Data").userName.Text = vbNullString
End Sub
确保相当长足以覆盖您的文本框
或
您可以使用 "dummy/informative" 文本在输入文本框后立即删除以进行后续输入
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
…(所有文本框依此类推)