2013-10-01 14 views
7

Mam userform w programie Excel, który prosi o nazwę użytkownika i hasło. Po wpisaniu hasła, jeśli naciśniesz Enter, po prostu "wybierze" następny element, którym jest przycisk LogIn, ale nie naciska go. Musisz ponownie nacisnąć Wprowadź, aby faktycznie nacisnąć przycisk.EnterKey, aby nacisnąć przycisk w VBA Userform

Jak mogę to zrobić, gdy naciśnięcie przycisku Enter na klawiaturze spowoduje naciśnięcie przycisku LogIn i zostanie skojarzony z nim kod (Logincode_click)?

+1

To jest duplikat http://stackoverflow.com/questions/22792836/press-enter-in-textbox-and-execute-button-function-in-vba (a drugi ma znacznie lepszą odpowiedź niż którykolwiek z tych) – Penn

Odpowiedz

1

Użyj pola tekstowego za teleskopowa Exit wydarzenie:

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

to nie wydaje się działać. gdzie powinienem umieścić ten kod. W module formularza użytkownika? – user2385809

+0

Tak, przechodzi to do modułu UserForm i upewnij się, że nazwa podrzędna 'TextBox1_Exit' odpowiada nazwie twojego pola tekstowego. Tak więc, jeśli twoje pole tekstowe nazywa się 'MyTextBox', to powinno być' Private Sub MyTextBox_Exit (... ' –

+0

Ale myślę, że odpowiedź Jacoba poniżej jest dokładniejsza niż moja.To samo zastrzeżenie do nazewnictwa i umieszczenia podprogramu w module UserForm. –

8

Można także użyć pola tekstowego W dniu Naciśnij klawisz obsługi zdarzenia:

'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 jest tego przykładem. Upewnij się, że wybrałeś pole tekstowe, do którego chcesz się odnieść, a także kod Logincode_Click to przykład podtytułu, który wywołujesz (uruchamiasz) tym kodem. Upewnij się, że odnoszą się do preferowanego sub

+1

+1. Może to być lepsze lub bardziej precyzyjne niż moja odpowiedź, która również wystrzeliłaby wydarzenie na klawisz 'Tab' lub kliknięcie myszą w polu tekstowym. –

+0

@DavidZemens, otrzymuję komunikat "Błąd kompilacji:' "Deklaracja procedury nie pasuje do opisu zdarzenia lub procedury o tej samej nazwie", ale jestem pewien, że nie mam innej nazwanej procedury "EnterTextBox". 'TextBox1 = EnterTextBox' i' Logincode_Click = CommandButton1_Click'w moim przykładzie. Czego by mi brakowało? – Mertinc

+0

@Mertinc Proponuję zadać własne pytanie :) łatwiej będzie Ci pomóc, jeśli zadasz dobre pytanie i podasz kod, którego próbujesz użyć. jest mało prawdopodobne, aby ktokolwiek odpowiedział na komentarz dotyczący 3-letniej odpowiedzi na czyjeś pytanie! –

4

Ten pracował dla mnie

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

Pamiętaj, aby uniknąć „magicznych liczb” gdy jest to możliwe, albo poprzez definiowanie własnych stałych lub za pomocą wbudowanego Stałe vbXXX.

W tym przypadku możemy użyć vbKeyReturn wskazać kod dostępu klawisz ENTER (w zastępstwie za YourInputControl i SubToBeCalled).

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

Zapobiega to całej kategorii problemów ze zgodnością i prostych literówek, szczególnie dlatego, że VBA kapitalizuje dla nas identyfikatory.

Pozdrawiam!

0

następstwie @ komentarz Penna, aw przypadku przerwy linku, można również osiągnąć poprzez ustawienie właściwości przycisku Default do True (można ustawić to w oknie właściwości, otwarty przez uderzenie F4)

W ten sposób, gdy zostanie naciśnięty Powrót, VBA wie, aby aktywować zdarzenie kliknięcia przycisku. Podobnie ustawienie właściwości przycisku Cancel do True spowoduje zdarzenie click ten przycisk, aby uruchomić ilekroć ESC klucz jest trafiony (przydatne dla wdzięcznie wychodzenia UserForm)


Źródło: Odpowiedź Oliviera Jacot-Descombes dostępnej tutaj https://stackoverflow.com/a/22793040/6609896

0

Tutaj można po prostu użyć:

SendKeys "{ENTER}" na końcu kodu związanego polu Nazwa użytkownika.

Aby pominąć naciśnięcie przycisku ENTER raz (jeden raz).
W wyniku tego zostanie aktywowany następny przycisk (przycisk "Zaloguj się"). A kiedy raz naciśniesz ENTER (pożądany wynik), uruchomi się kod, który jest połączony z przyciskiem "Zaloguj się".

Powiązane problemy