Jak povolit zadávání jen číselných vstupů do TextBoxu

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

2 Comments

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

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *