< návrat zpět

MS Excel


Téma: KeyUP ve VBA formuláři rss

Zaslal/a 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: zip28536_nahorudolu.zip (16kB, staženo 34x)
Zaslat odpověď >

#028541
avatar
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 Sub
citovat
#028542
avatar
A vykašlete se na tfutajblovou variantu ElseIf, od toho je Select Case.citovat
#028544
avatar
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
#028545
avatar
teď se to chová přesně jak potřebuji, jinak doufám že jsem vás tím ElseIf moc nepohoršil...

moc díkycitovat
#028546
avatar
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 :-Dcitovat
#028547
avatar
@xlnc: Přesně tuto reakci jsem očekával, takže si to opravdu užívám ;-)...citovat
#028548
avatar
A tu prdel s nicky taky nechápu.citovat
icon #028557
eLCHa
@xlnc
A tu prdel s nicky taky nechápu.

img
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... img

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 imgcitovat
#028566
avatar
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

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje