2013-10-01 49 views
7

我在Excel中有一個用戶表單,要求輸入用戶名和密碼。如果您按輸入,一旦您輸入密碼,它只是「選擇」下一個項目,即LogIn按鈕,但不會按下它。您必須再次點擊輸入才能實際按下按鈕。EnterKey在VBA中按下按鈕Userform

我該如何做到這一點,當用戶按下他的鍵盤上的輸入登錄按鈕被按下,並且相關的代碼運行(Logincode_click)?

+1

這是http://stackoverflow.com/questions/22792836/press-enter-in-textbox-and-execute-button-function-in-vba(和另一個有更好的答案比任何這些) – Penn

回答

1

使用文本框的Exit事件處理程序:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    Logincode_Click 
End Sub 
+0

這似乎沒有工作。我應該在哪裏放這個代碼。在用戶表單的模塊中? – user2385809

+0

是的,這是在UserForm的模塊中,並確保子文件名TextBox1_Exit對應於您的文本框的名稱。所以,如果你的文本框被稱爲'MyTextBox'那麼它應該是'Private Sub MyTextBox_Exit(...' –

+0

但我認爲雅各布的答案比我的更精確,同樣需要在UserForm的模塊中命名和放置子例程。 –

8

你也可以使用文本框的啓用按鍵事件處理程序:

'Keycode for "Enter" is 13 
Private Sub TextBox1_KeyDown(KeyCode As Integer, Shift As Integer) 
    If KeyCode = 13 Then 
     Logincode_Click 
    End If 
End Sub 

Textbox1的就是一個例子。確保你選擇了你想要引用的文本框,並且Logincode_Click是你用這個代碼調用(運行)的一個例子。請務必參閱您的首選子對我

+1

+1。這可能比我的答案更好或更準確,它也會在「Tab」鍵上觸發事件,或者通過鼠標單擊文本框。 –

+0

@DavidZemens,我得到了'編譯錯誤:'過程聲明不符合具有相同名稱的事件或過程的描述,但我確定我沒有另一個名爲procedure的EnterTextBox。 'TextBox1 = EnterTextBox'和'Logincode_Click = CommandButton1_Click'在我的例子中。我會錯過什麼? – Mertinc

+0

@Mertinc我會建議問你自己的問題:)如果你問一個好問題並且包含你正在使用的代碼,它會比以前更容易幫助你。這是不太可能的,任何人都不會迴應對其他人的問題回答3年的答案! –

4

這一個工作

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
     If KeyCode = 13 Then 
      Button1_Click 
     End If 
End Sub 
6

一定要避免「幻數」只要有可能,無論是通過定義自己的常量,或者使用內置的vbXXX常量。

在這種情況下,我們可以使用vbKeyReturn指示輸入鍵的鍵碼(更換YourInputControlSubToBeCalled)。

Private Sub YourInputControl_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
     If KeyCode = vbKeyReturn Then 
      SubToBeCalled 
     End If 
    End Sub 

這避免了兼容性問題,簡單的拼寫錯誤一整類,特別是因爲VBA大寫標識我們。

乾杯!

0

繼@佩恩的評論,並在情況下,鏈接中斷,您也可以通過按鈕的Default屬性設置爲True實現這一目標(您可以在屬性窗口中設置,開放擊中F4

這種方式每當返回被擊中,VBA知道激活按鈕的點擊事件。同樣一個按鈕Cancel屬性設置爲True將導致該按鈕的點擊事件運行時ESC鍵擊(用於正常退出用戶窗體)


來源:奧利維爾Jacot-Descombes的答案在這裏訪問https://stackoverflow.com/a/22793040/6609896

0

在這裏,你可以簡單地使用:

SendKeys "{ENTER}"在代碼鏈接到用戶名字段結束。

所以你可以跳過按ENTER鍵一次(一次)。
因此,下一個按鈕(此處爲「登錄」按鈕)將被激活。當你按一次ENTER(你想要的結果)時,它將運行與「登錄」按鈕鏈接的代碼。