Kontroll av indata i textrutor


Här demonstreras ett flertal tips för att kontrollera indata som matas in i textrutor (textbox). Dessa textrutor kan endera vara placerade i arbetsblad eller, vilket kanske är vanligast, i formulär.

Har vi ett flertal identiska objekt där en och samma kod ska användas är det lämpligt att skapa control-arrayer såsom tipset Skapa control-arrayer visar.

Kontroll att indata är heltal

Här visas hur vi kan kontrollera att heltal anges i en textruta.

Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)

   Cancel = CheckTal(TextBox3)

End Sub

 

Private Function CheckTal(TxtBox As MSForms.TextBox) As Boolean

   '© 2002 Alla rättigheter XL-Dennis

   Dim stTal As String

   stTal = TxtBox.Text

 

   If IsNumeric(stTal) Then

      'Kontroll om negativt tal matas in.

      If stTal < 0 Then

         MsgBox "Talet måste vara större än 0.", vbExclamation

         TxtBox.Text = ""

         CheckTal = True

         'Kontroll om heltal matas in.

      ElseIf stTal - Int(stTal) = 0 Then

         CheckTal = False

      Else

         MsgBox "Talet måste vara ett heltal.", vbExclamation

         TxtBox.Text = ""

         CheckTal = True

      End If

      'Om inte indata är ett tal.

   Else

      MsgBox "Indata måste vara ett heltal.", vbExclamation

      TxtBox.Text = ""

      CheckTal = True

   End If

End Function

 

Kontrollera att indata är datum

Här visas hur vi kan kontrollera att datum anges i en textruta.

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

   Cancel = CheckDatum(TextBox1)

End Sub

 

Private Function CheckDatum(TxtBox As MSForms.TextBox) As Boolean

   '© 2002 Alla rättigheter XL-Dennis

   Dim stDatum As String

    stDatum = TxtBox.Text

 

   If IsDate(stDatum) Then

      CheckDatum = False

   Else

      MsgBox "Indata måste vara ett datum såsom 2002-10-01.", vbExclamation

      TxtBox.Text = ""

      CheckDatum = True

   End If

End Function


Kontrollera att indata endast är bokstäver ingående i vårt alfabetet

Här demonstreras en ytterligare teknik för att kontrollera indata.

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

   '© 2002 Alla rättigheter XL-Dennis

   Dim boText As Boolean

   Select Case KeyAscii

      'Teckenserie A-Z, a-z, Å-Ä, Ö, å-ä, ö

   Case 65 To 90, 97 To 122, 196 To 197, 214 To 214, 228 To 229, 245 To 245

      boText = True

      'Övriga tecken är ej tillåtna.

   Case Else     

      KeyAscii = 0

      boText = False

      MsgBox "Bara text är tillåten.", vbInformation

   End Select

End Sub

 

Ett enkelt sätt att få reda på varje teckens nummer är att exekvera följande procedur:

Sub TeckenNummer()

   '© 2002 Alla rättigheter XL-Dennis

   Dim i As Long

   For i = 1 To 255

      Cells(i, 1).Value = Chr(i)

   Next i

End Sub

 

Markera inmatat värde

Här visas hur vi relativt enkelt kan markera den inmatade texten när det t ex blir fel.
 

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

   With TextBox1

      If Len(.Text) < 2 Then

         Cancel = True

         .SelStart = 0

         .SelLength = Len(.Text)

      End If

      MsgBox "Antal tecken måste uppgå till minst 2 stycken", vbInformation

   End With

End Sub