Pro informace o výuce Excelu klikněte zde
Pokud programujete ve VBA, určitě jste už narazili na problém, jak povolit uživatelům ve formuláři zadávat jen číselné vstupy do TextBoxu.
Jedno z možných řešení:
Vytvoříme funkci ZapisJenCislo, která povolí vložit do TextBoxu jen číselný znak.
Sub ZapisJenCislo(ByVal KeyAscii As MSForms.ReturnInteger, Ct As Control, Optional desCis As Boolean = True) 'Povoluje zapsat to textboxu jen kladné číslo 'Oddělovač desetinných míst lze vkládat pomocí tečky i čárky - automaticky se změní podle národního nastavení 'Autor: Radek Jureček 'Datum: 28.6.2009 '------------------------------------------- 'Pokud není stisknuta klávesa 0-9, tečka, nebo čárka - nevkládat If Not ((KeyAscii >= Asc("0") And KeyAscii <= Asc("9")) _ Or KeyAscii = Asc(".") _ Or KeyAscii = Asc(",") _ Or KeyAscii = Asc(Application.International(xlDecimalSeparator))) Then KeyAscii = 0 End If If desCis Then 'Změnit tečku nebo čárku podle národního nastavení a oddělovač desetinných míst</span> If KeyAscii = Asc(".") Then KeyAscii = Asc(Application.International(xlDecimalSeparator)) If KeyAscii = Asc(",") Then KeyAscii = Asc(Application.International(xlDecimalSeparator)) 'Kontrola na zadání dvou oddělovačů des. míst If KeyAscii = Asc(Application.International(xlDecimalSeparator)) Then If Len(Ct.Text) - Len(Replace(Ct.Text, Application.International(xlDecimalSeparator), "")) > 0 Then KeyAscii = 0 End If Else 'Pokud není povoleno vkládaní desetinných čísel - nevkládat If KeyAscii = Asc(".") Then KeyAscii = 0 If KeyAscii = Asc(",") Then KeyAscii = 0 End If End Sub
Potom vytvoříme ke každému požadovanému TexBoxu událost KeyPress, do které vložíme naši proceduru ZapisJenCislo
Private Sub txt1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'Umožní zadání čísla do TextBoxu s názvem txt1 pomocí klávesnice Call ZapisJenCislo(KeyAscii, Me.txt1) End Sub Private Sub txt2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'Umožní zadání celého čísla do TextBoxu s názvem txt2 pomocí klávesnice Call ZapisJenCislo(KeyAscii, Me.txt2, False) End Sub <pre>
Vstup můžeme samozřejmě kontrolovat až po stisknutí tlačítka OK.
Např.: pomocí níže uvedené funkce:
Function JeCislo(Vstup, Optional JenCele As Boolean = False) As Boolean 'Vrátí PRAVDA, pokud je vstup číslo 'pokud nastavíme druhý nepovinný parametr na True, vrátí PRAVDA jen v případě celého čísla 'Autor: Radek Jureček 'Datum: 28.6.2009 '------------------------------------------- JeCislo = False If IsEmpty(Vstup) Then Exit Function If IsNumeric(Vstup) Then If JenCele Then If CLng(Vstup) <> Vstup Then Exit Function JeCislo = True End If JeCislo = True End If End Function
Ahoj.
super, ale nemůžu přijít na to, jak zadávat i záporná místa tj. možnost zadání znaménka „-“ pouze před číslo a aby při mazání čísel v textboxu uživatelem nemohla být hodnota která není číslo např. ze záporného čísla (- 22,6) umazáním nevzniklo (-,6).
Pro zadání i záporných čísel upravte proceduře „ZapisJenCislo“ část kódu:
If Not ((KeyAscii >= Asc(„0“) And KeyAscii <= Asc("9")) _ Or KeyAscii = Asc(".") _ Or KeyAscii = Asc(",") _ Or KeyAscii = Asc(Application.International(xlDecimalSeparator)) Or (KeyAscii = Asc("-") And Len(Ct) = 0)) Then KeyAscii = 0 End If hodnota -,6 je jiný zápis čísla -0,6