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 alfabetetHä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