我编程一种交叉引用数据库。根据选择或创建的文档名称生成ID。等待,直到用户停止打字的ComboBox运行宏(VBA)
我在标题中提到的组合框作用于改变(后3个字母),检查类似的条目对什么类型的数据库,并显示下降downof匹配的选项。一旦从匹配列表中选取一个条目或创建一个新名称 - 就会生成相应的编号。
由于每个信打后产生的下拉列表中,这需要一段时间来输入你想要的东西。我想在最后更改为运行宏后等待几秒钟。
我如何能做到这一点任何想法?
我编程一种交叉引用数据库。根据选择或创建的文档名称生成ID。等待,直到用户停止打字的ComboBox运行宏(VBA)
我在标题中提到的组合框作用于改变(后3个字母),检查类似的条目对什么类型的数据库,并显示下降downof匹配的选项。一旦从匹配列表中选取一个条目或创建一个新名称 - 就会生成相应的编号。
由于每个信打后产生的下拉列表中,这需要一段时间来输入你想要的东西。我想在最后更改为运行宏后等待几秒钟。
我如何能做到这一点任何想法?
这有点棘手,因为VBA不支持多线程。但是我们可以使用Application.OnTime
事件来触发未来的测试,以测试最后一次按键事件是否至少3秒钟之前。
在模块插入:
Option Explicit
Public LastKeyEvent As Date
Public Const WaitTimeValue As String = "00:00:03" 'test for key event in 3 seconds
Public Sub TestKeyEvent()
'test if last key event is at least 3 seconds ago.
'If so: run your search or message box
'If not: do nothing
If LastKeyEvent <> 0 And LastKeyEvent + TimeValue(WaitTimeValue) <= Now Then
LastKeyEvent = 0 'Ensure this is only triggered once:
'If we don't do this and multiple keys are pressed within 1 second
'then it would run multiple times.
MsgBox "3 seconds without keypress, we can start search"
'start your search here (instead of message box) …
End If
End Sub
现在你可以使用你的文本框更改事件如TextBox1
:
Private Sub TextBox1_Change()
Dim alertTime As Date
LastKeyEvent = Now 'remember when the last key event was
alertTime = LastKeyEvent + TimeValue(WaitTimeValue)
Application.OnTime alertTime, "TestKeyEvent" 'run TestKeyEvent in 3 seconds
End Sub
注:
这是一种变通方法,工作2秒或更长时间。但不少于2秒。
YES!我已经测试过,这是完美的Peh,我希望有一天能像你一样聪明。不用多说,谢谢你的快速回答。 – EndUserAbuser
@EndUserAbuser如果它符合您的需求,请将答案标记为“已接受”。这就是我们在这里说“谢谢你”的方式...... :) – CMArg
ha花了我很多时间,但我终于找到了绿色的支票,谢谢你的提示。 – EndUserAbuser
另一种再次使用Application.OnTime
:
在用户窗体:
Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
StartTimer
End Sub
在模块:
Public RunTime As Double
Public Sub StartTimer()
On Error Resume Next
Application.OnTime EarliestTime:=RunTime, Procedure:="YourCode", Schedule:=False
RunTime = Now() + TimeValue("00:00:03")
Application.OnTime RunTime, "YourCode"
End Sub
Public Sub YourCode()
MsgBox "It's working!"
End Sub
如何产生的下拉列表?看一看'DoEvents'命令,还可以将'ComboBox'' Change'事件更改为'Exit'事件 – Tom
这将有助于查看您的代码。我怀疑你想要类似于当你开始在谷歌搜索中输入时会发生什么?如果是这种情况,请考虑在用户与该字段进行交互之前(即在表单加载或工作簿打开时),将数据库中的列导入到XML中。您可以更有效地实现下拉选项列表。我以前创建过这样的东西,但我使用了线程。不幸的是,据我所知,你没有选择在VBA – Zac
线程非常类似于谷歌搜索是的。我希望我可以开始一个单独的线程。我的代码很长,我不确定发布它会有助于收集想法。尽管如此,我会把一个简短的伪装起来。我还没有探索过使用.xml并且会做一些研究,但那只会缩短字母之间加载的时间,我想避免一起运行代码。 – EndUserAbuser