Avatar billede thefoneck Nybegynder
16. april 2004 - 15:52 Der er 21 kommentarer

Catch keypress

Hej, jeg forstår ikke hvorfor jeg i en VBA form ikke kan lave en form for catch all for tastetryk.
jeg har en form, og hertil vil jeg bare have hvis der trykkes enter (ligemeget hvor cursor står), så skal den starte funktion

altså:
Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = vbKeyReturn Then start_funktion
End Sub

denne bliver bare aldrig triggeret... I dont get it?
Avatar billede martin_moth Mester
16. april 2004 - 17:24 #1
Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If KeyAscii = 13 then start_funktion
End Sub

Det kunne du nu selv have fundet ud af ved følgende:

Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  msgbox "Der er tastet " & keyascii
End Sub

:o)
17. april 2004 - 20:27 #2
Hvilket program benytter du? Når du siger VBA, kan det være Word, Access, Excel  eller et andet Office-program.
I nogle af dem, ved jeg, at man skal sætte egenskaben "KeyPreview" (tastgennemsyn) til True for at kunne fange tastetryk på formularniveau.
Avatar billede martin_moth Mester
18. april 2004 - 11:55 #3
Det kunne også være et ikke-office program :o)

Den kode jeg har givet virker fint i Excel!
18. april 2004 - 12:45 #4
Men da spørgsmålet går på en VBA-form, så er sansynligheden størst for at det er en MS-program (Excel, Word, Access, Outlook, Powerpoint, Visio, Project m.m.).

Bortset fra det, er din kode ikke magen til Thefoneck's? Eneste forskel er at du referere til KeyAscii = 13, hvor han bruger Keyascii = vbKeyReturn. Men vbKeyReturn  er jo bare en konstant med værden 13.
Avatar billede martin_moth Mester
18. april 2004 - 16:47 #5
Ja, du har ret, men det virker ikke med vbKeyReturn, men godt med 13.
Avatar billede thefoneck Nybegynder
19. april 2004 - 14:33 #6
Well, det virker altså ikke... mit problem er mere - der går aldrig ned i funktionen. den springer den faktisk over. jeg har ikke sådan en KeyPreview egenskab jeg kan sætte ! desværre
jeg bruger excel 97
Avatar billede martin_moth Mester
19. april 2004 - 15:11 #7
Det virker perfekt i excel 2000.
Avatar billede thefoneck Nybegynder
19. april 2004 - 16:46 #8
Udfordringen er hermed at aflure excel 97 dens spidsfindigheder!!!
:) jeg er igang
Avatar billede martin_moth Mester
19. april 2004 - 19:00 #9
Prøv at opret en ny xls-fil og copypaste min kode - se om det ikke virker.
Avatar billede thefoneck Nybegynder
22. april 2004 - 11:41 #10
Hej Martin, det er rigtigt hvad du siger, men prøv at smid en tekstbox eller andet ind i formen, så virker det ikke længere. Desværre.
OG så er det jo irriterende at man ikke kan fange enter tasten i et tekstfelt, for så kunne jeg gøre det, men enter acter bare eom tab!
Avatar billede martin_moth Mester
22. april 2004 - 11:53 #11
Selvfølgelig virker det!

Du er lidt upræcis - hvad ønsker du der skal skal der ske hvis du trykker enter i textboxen?

hvis start_function skal køres, skal du naturligvis også have en keypress event på textboxen også!
Avatar billede thefoneck Nybegynder
22. april 2004 - 12:16 #12
ja, jeg vil køre en funktion, og jeg opdagede lige at der er noget som enterKeyBehaviour, sættes den og multiline tirl true vil enter trigger textbox_change... - ikke keypress.

Prob er så bare... hvordan fanger jeg keypress i den change?
textbox_Change(ByVal KeyAscii As MSForms.ReturnInteger)
virker fx ikke da _change jo normalt ikke tager inputs.
Avatar billede martin_moth Mester
22. april 2004 - 12:22 #13
?

Jeg er slet ikke med.

Prøv at vis din kode
Avatar billede martin_moth Mester
22. april 2004 - 12:22 #14
Ahh - nu forstår jeg alligevel...
Avatar billede martin_moth Mester
22. april 2004 - 12:24 #15
Hvis du vil have en textbox med multiline = true, så må du acceptere, at brugeren kan taste return. Er det ikke også meningen med multiline=true?

Enhver der bruger vil da også blive idiot af at en eller anden funktion startes når han indtaster noget (med brug af return) i en textbox.

Hvad er det egentligt du vil - hvad er det for en funktion der skal køres, hvad gør den, og hvorfor skal den køres når der netop trykkes return?
Avatar billede thefoneck Nybegynder
22. april 2004 - 13:25 #16
Hey, vi misforstår hinanden
jeg vil gerne have at en bruger kan taste enter, jeg vil bare fange det når vedkommende gør det.
Forstil dig du har en lommeregner, der er det en fordel når du har skrevet dine to tal, at så kan du taste enter - så musen ikke skal bruger hele tiden. Det er den effetkt jeg ønsker.

Derfor:
Fang tryk - hvis enter, kør funktion.
Casen er nu at jeg ikke kan finde ud af hvad brugeren har trykket.
i funktionen

Private Sub txtBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
kan jeg fange alle testetryk - pånær enter, da den jo laver multiline

enter vil derimod starte funktionen Private Sub txtBox_Change()
men her kan jeg ikke fange at keyascii = 13, da den funktion ikke returnerer hvilken tast brugere trykkede...?
so Im stuck
Avatar billede martin_moth Mester
22. april 2004 - 13:48 #17
Jeg forstår slet ikke hvad du vil.

Prøv at svar på følgende: Hvad skal der ske når brugeren taster ENTER i dit program. Skal fokus blot flyttes fra en kontrol til en anden?

Den funktion du taler om igen og igen - HVAD gør den?????????

Jeg tror du skal glemme hvad du har skrevet tidliger, og fortælle hvad det er for et program du vil lave, og hvad der skal ske når nogen trykker enter.
Avatar billede thefoneck Nybegynder
22. april 2004 - 13:57 #18
ok, very simple:
Jeg har en funktion som jeg gerne vil have skal skrive

sub hej()
msgbox "du trykkede sq på enter din frækkert"
end sub

thats all.

jeg jeg skal finde ud af om en bruger taster enter og når det sker "du trykkede sq..." :)

hvordan finder jeg ud af hvornår min bruger rammer enter knappen?
Avatar billede martin_moth Mester
22. april 2004 - 14:42 #19
Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If KeyAscii = 13 then hej
End Sub

sub hej()
  msgbox "du trykkede sq på enter din frækkert"
end sub


Virker hvis du trykker enter mens formen har fokus
Avatar billede thefoneck Nybegynder
22. april 2004 - 14:45 #20
d er nemlig lige hvad den gør, men som jeg skrev tidligere, så er fokus på tidspunktet en tekstbox. Det sjove er at selvom du har mulitline mv. på true, så vil enter ikke trigger keypress eventen... og så er den svær at fange
Avatar billede martin_moth Mester
22. april 2004 - 16:46 #21
Nu har jeg forsøgt selv at lave en form, og jeg kan da godt se, at såsnart der kommer en textbox på formen, vil den ALTID have fokus. Kun når der ikke er kontroller på formen, kan du bruge UserForm_KeyPress

Og jeg kan godt se, at keypress-eventen for en textbox ikke lbiver triggeret - heller ikek keydown og keyup.

Beklager, at jeg ikke helt fik fat i dit problem til at starte med. Og beklager, at jeg ikke lige kan løse det. Andre?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester