2009-12-06 24 views
2

我有一個用戶窗體,其上有一些文本框輸入字段,通過複選框啓用/禁用。當點擊一個複選框來檢查它時,我想將焦點移到啓用了現在的文本框中。如何確定VBA UserForm中的下一個tabstop?

該文本框是選項卡順序複選框後的下一個控件,所以它看起來像使用Tab鍵順序來找到適當的文本框將是一個好主意。

但是...如何在給定的控件之後在tab選項中找到下一個控件?有沒有辦法做到這一點,或者我必須枚舉所有的控件,並找出自己?

+0

老兄我刪除了我的答案,因爲它是不完整的,但我知道一個事實是在窗體或控件上有這樣的功能,我已經使用它。當您鍵入ActiveControl後跟點時,請嘗試查看inteli-sense選項。會後代碼示例,但出去聖誕節購物與現在的錯誤:) – 2009-12-06 12:47:22

+0

@Binary Worrier:我認爲你必須考慮VB而不是VBA。沒有FindControl方法,也沒有UserForm對象或適合該賬單的ActiveControl對象。 – 2009-12-06 13:43:09

+0

PS。我從來沒有在牧場:-) – 2009-12-06 13:44:45

回答

2

我明白,這是以「列舉的所有控件」的標題下,但它很簡單,我附上代碼完整性:

Private Sub CheckBox1_Click() 
Dim ctl As Control 
For Each ctl In Me.Controls 
    If ctl.TabIndex = Me.ActiveControl.TabIndex + 1 Then 
     ctl.SetFocus 
     Exit For 
    End If 
Next 

End Sub

+0

是的,我最終做了非常像這樣的事情 - 但請注意,並非每種類型的控件都具有TabIndex屬性(例如圖片),因此您需要防範這種情況。 – 2009-12-31 21:55:07

1

作爲一種不同的方式來看待這一點。

你能不情願使用要集中文本框,並在checkbox.tag設置名稱

然後在你的VBA代碼使用

DoCmd.GoToControl CheckBox.Tag 

CheckBox.TagTextbox.Name

編輯:

OK,我發現這個

SendKeys "{Enter}", True 

VBA code for moving to next control? It must be eeeasy

+0

謝謝。我可以,但我想避免將控件的名稱放在任何地方,因爲我希望能夠反覆複製和粘貼這些控件 - 而且我不想不斷地更新控件的名稱標籤(或其他地方)。 – 2009-12-06 11:34:10

+0

好的,我更新了答案。 – 2009-12-06 11:47:21

+0

沒有冒犯,但是有比使用發送密鑰更強大的選項,在用戶可以在發送密鑰激發之前將焦點切換到另一個應用的環境中發送密鑰相當脆弱。 – 2009-12-06 12:49:37

0

我曾與

SendKeys "{Enter}", True 

麻煩,一個小實驗,我發現這個工作

SendKeys "{TAB}", True 

一個警告......如果你在VBE單步調試代碼的時候,並看着它在窗體上,SendKeys被執行在代碼中執行。起初爲什麼我的代碼開始看起來很奇怪,例如困惑於我額外的間距和額外的線條!

+0

是的,雖然這可以在90%的時間內正常工作(如果在我的機器上運行,並且如果我準備讓我的手離開鍵盤等),這不是我準備推出的解決方案很多用戶。 – 2013-11-21 09:27:39