< návrat zpět
MS Excel
Téma: KeyUP ve VBA formuláři
Zaslal/a m.niki 5.12.2015 11:48
Dobrý den,
ve VBA formuláři mám textbox, v němž chci např. při stisknutí klavesy šipka nahoru, zvednout hodnotu a 1, při stisknutí klávesy šipka dolů, snížit hodnotu o 1, . Vytvořil jsem si na to tuto proceduru:
Private Sub T1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If T1.Value = "" Then T1.Value = 0
If KeyCode = 38 Then ' šipka nahoru
T1.Value = T1.Value + 1
ElseIf KeyCode = 40 Then ' šipka dolů
T1.Value = T1.Value - 1
ElseIf KeyCode = 46 Then ' delete
T1.Value = 0
ElseIf KeyCode = 8 Then ' backspace
T1.Value = 0
End If
End Sub
při stisku šipky nahoru, mi to funguje, ale při stisku šipky dolů mi kurzor ujede na další prvek ve formuláři, podařilo se mi akorát vypozorovat, že když v textboxu přesunu myší kurzor před číslo, tak se stisk šipky dolů zachytí, procedura proběhne a kurzor se přesune na konec, při dalším stisku šipky dolů už ale zase ujede na další prvek formuláře? nevíte někdo co s tím?
vzorový sešit přikládám
díky, Michal
Příloha: 28536_nahorudolu.zip (16kB, staženo 34x)
xlnc(5.12.2015 12:56)#028541 Při KeyUp je bohužel už pozdě a myslím, že to platí i pro KeyPress. Excel sám o sobě si hlídá u šipky už Down a realizuje TabOrder, kdy přechází na další prvek. I když se TabOrder zbavíte, má tendenci tu událost Down pořád odchytávat. Takže možná trochu prasárna (to pod VBA bude dost často), ale zpracovávejte už Down a následně "resetujte" stisk KeyCode=0. Jinak samozřejmě zvyklostí je pro tyhle účely používat SpinButton.
Private Sub T1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If T1.Value = "" Then T1.Value = 0
Select Case KeyCode
Case 38
T1.Value = T1.Value + 1
KeyCode = 0
Case 40
T1.Value = T1.Value - 1
KeyCode = 0
Case 8, 46
T1.Value = 0
End Select
End Subcitovat
xlnc(5.12.2015 12:58)#028542 A vykašlete se na tfutajblovou variantu ElseIf, od toho je Select Case.
citovat
Pavlus(5.12.2015 13:15)#028544 Už to je vyřešené, ale jen tak pro "pobavení", co jako první napadlo mě (selský rozum).
Použít "KeyDown", a při stisknutí šipky dolů zavolat: SendKeys "{UP}"... :-)
P.
citovat
m.niki(5.12.2015 13:16)#028545 teď se to chová přesně jak potřebuji, jinak doufám že jsem vás tím ElseIf moc nepohoršil...
moc díky
citovat
xlnc(5.12.2015 13:17)#028546 Pro pobavení? Každý rozumný, kdo vidí to ElseIf, už si myslí své. A že vás baví prasácké řešení, je věc další. Tak si to užijte, no :-D
citovat
Pavlus(5.12.2015 13:21)#028547 @xlnc: Přesně tuto reakci jsem očekával, takže si to opravdu užívám ;-)...
citovat
xlnc(5.12.2015 13:29)#028548 A tu prdel s nicky taky nechápu.
citovat
eLCHa(7.12.2015 7:01)#028557 @xlnc
A tu prdel s nicky taky nechápu.
Já myslím, že chápete.
Prostě další
YABA.
Dal bych ruku do vody o teplotě 97,7 stupňů Fahrenheita za to, že to znamená "to". Než jsem to začal používat, taxem si to ověřoval, to si pamatuji. Teď to nemůžu najít...
Nicméně, že to není výmysl tohoto fóra se můžete přesvědčit na jiných fórech. např.:
- na LinkedIn běžně
- ve 14 příspěvku
zde
a určitě bych našel i dále..
Jako emotikon se to používá jako obejmutí, takže se to dá volně přeložit jako
@xlnc = milý xlnc
citovat
Pavlus(7.12.2015 20:17)#028566 Já to používám v tomto případě skutečně ve smyslu "to".
V rychlosti jsem našel vysvětlení jenom na Wikipedii:
"V diskusích online bývá znak @ občas využíván jako vokativní prefix před jménem (přezdívkou) oslovovaného uváděným na začátku příspěvku namísto dvojtečky v postpozici, symbolu > nebo případně 2 (z anglické homofonie two - to, předložka „k“ respektive nepřímého předmětu odpovídajícího českému dativu)."
Zdroj:
https://cs.wikipedia.org/wiki/Zavin%C3%A1%C4%8D
P.
citovat