2015-11-10 58 views
1

我在MS Excel 2010中的用戶窗體中有一系列組合框。我有一個_enter事件分配給每個調用.DropDown的每個事件,這樣當我通過這些框選中時,它們將自動打開下拉窗口。這對第一個非常有用,但是當我切換到下一個時,它不起作用。 _enter事件觸發(使用msgbox進行測試),但不會下降。下面的框會下降,但不是那個之後的框。如果你倒退,同樣的事情會發生相反的情況。如果我在它們之間以製表符順序放置虛擬文本框,則它們全部下降。ComboBox下拉列表只能觸發每個其他框

任何想法如何解決這個問題?

我也嘗試過使用KeyUp - > Ascii 9(tab)獲得相同的結果。

+0

如果您選擇第二個組合框的任何值,則第三個組合框將下拉。這不是你的查詢的解決方案,但它只是建議。 – harun24hr

回答

1

在我給出解決方案之前,我會試着解釋爲什麼會出現這種意外行爲。看來由於一些賽事比賽的狀況。

當某些組合(例如ComboBox1)打開(下拉窗口打開),然後使用TAB鍵導航到另一個組合(例如ComboBox2)時,會發生這種情況。出現競態情況是因爲在內部,ComboBox1的窗口也會處理按下的鍵,所以它會立即關閉ComboBox2窗口,因爲在同一個用戶窗體上一次只能打開一個組合。

解決方法是處理KeyUp事件,這是您的新組合通過TAB導航獲取焦點後發生的最後一個事件。

解決方案

對於每一個組合,添加以下事件處理程序:

Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
    If KeyCode = vbKeyTab Then ComboBox1.DropDown 
End Sub 

Private Sub ComboBox2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
    If KeyCode = vbKeyTab Then ComboBox2.DropDown 
End Sub 

' similar handlers for ComboBox3, ComboBox4 etc.. 

這些處理程序是足夠讓你從TAB導航想要的行爲。如果您在使用鼠標選擇組合時需要相同的行爲,您也可以保持_Enter處理程序的原樣。

+0

謝謝!在使用ascii值而不是vbKeyTab之前,我曾嘗試過這樣做,但是當我按照自己的方式使用ascii值時,它就起作用了。我想我可能錯誤輸入了下拉命令。 –

+0

@CaseyHungler很高興幫助:)。 vbKeyTab的ascii值是9,我認爲它也可以。 –