我編程一種交叉引用數據庫。根據選擇或創建的文檔名稱生成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