ActiveX文本框显示上一个条目

时间:2019-02-18 02:54:14

标签: excel

道歉,没有显示我的代码,但是经过反复尝试,我认为我描述的问题可能是文本框属性问题,而不是编码错误或遗漏。该代码本身可以正常工作,但存在令人沮丧的现象。

在许多ActiveX控件中的wsheet上,我有一个文本框和2张图像。它们用于搜索功能。如您所料,文本框用于用户输入,图像用于“运行搜索”和“擦除搜索”。我将搜索文本设置为字符串。

我的问题是,在单击“运行搜索”或“擦除搜索”时,文本框会立即显示前一个文本字符串。我已经将前面的字符串全部设置为“”,但没有成功。

在设置将故意失败的搜索文本时最好观察到这一点。 顺序是... 1)输入“ XXXX”进行搜索 2)点击“运行搜索” 3)执行搜索代码 4)在文本框叙述返回“ XXXX not found”之前,它会暂时显示上一个条目,例如“ AAAA”,然后返回正确的结果。

如何预防?

编辑 没有回应,我将其发布在Jon Peltier的网站上,https://peltiertech.com/forms-controls-and-activex-controls-in-excel/#comment-1481602 友善地测试并得出结论:“它看起来像ActiveX,但我想您还是会坚持下去。” 通过测试,即使选择任何单元格,不仅图像控件,也会出现此现象。换句话说,一旦文本框失去焦点,它就会被触发。可以说,由于这是一个短暂的更改,因此似乎无法捕获文本。

2 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,并亲自提出了一个问题,但是设法获得更多的运气,请参阅: After setting ActiveX textbox to empty value, previous text briefly appears in box before disappearing again

通过响应者的帮助,我能够使用Application.SendKeys进行工作。答案之一可能可以帮助您解决此问题。

对我个人而言,需要Application.SendKeys,因为这会覆盖文本框中的值并刷新它,这意味着以前的值不再存在。为了完整起见,以下是我使用的代码的一个片段:

    'Select text box to update
    Sheet1.userName.Activate

    DoEvents
    'Replace value with ""
    Sheet1.userName.Application.SendKeys ("")

    'Copy above for other textboxes on sheet
    Sheet1.emailAddr.Activate

    DoEvents
    Sheet1.emailAddr.Application.SendKeys ("")
    'Change text box currently active to force change values to take place
    Sheet1.userName.Activate

我一次选择一个文本框,然后使用SendKeys(“”)作为模拟用户删除该框中当前字段的方法,此后,我切换回另一个文本框,这是强制执行的刷新值。

在使用完这些值之后,能够将文本框强制为空白意味着没有以前的值,以后可能会无意中出现。

答案 1 :(得分:0)

谢谢Skenworthy的建议。随着时间的流逝,我不断地回到我的问题上,但是没有成功,但是您的代码已成为解决方案的基础。 我只有1个文本框用作搜索输入,外加2个按钮,其中1个用于开始搜索,另1个用于清除。 我的解决方案是创建一个隐藏的虚拟文本框,每当我希望在搜索文本框中发表评论时,我都会使用sendkeys到虚拟框。但是,那不是最终的代码。鉴于可能发生的潜在用户错误的类型,在3个控件之间切换焦点变得太复杂了。因此,我放弃了开始搜索按钮,而是依靠Enter键和清除搜索按钮。 现在,每次需要返回响应消息时,我都会在清除搜索文本框之前立即使用下面的代码。它一直以来都没有缺陷。因此,很长一段时间以后,事后看来,我的具体解决方案似乎是如此简单,但再次感谢您提供指导。

Sub RemovePrevText()

''' use dummy txtbox to clear old message from SearchInput
With Sheets(1)
    .txtDummy.Activate
    DoEvents
    .txtDummy.Application.SendKeys ("")
End With

 End Sub