16. februar 2008 - 18:39Der er
6 kommentarer og 1 løsning
userform - kontrol af indtastning i textbox
Jeg har følgende udfordring:
I en textbox i en userform skal brugerne kunne indtaste følgende matrix:
ab 1111 aaa 111111 (aaa er et fast navn) bbbb 1111 (bbbb er et fast navn)
altså den første del er bogstaver, dernæst et mellemrum og derpå tal. Jeg vil gerne at keypress benyttes til at kontrollere at brugeren indtaster i ovenstående format. Jeg har 3 checkboxe, som afgør hvilken af de 3 formater der skal anvendes. ab kan være hele alfabetet, mens aaa og bbbb er to faste betegnelser.
Her her jeg lavet et lille eksempel, hvor jeg har har leget lidt med principperne - kan du selv komme videre herfra ??
Option Explicit
Private Const msVALTYPE_AB As String = "AB" Private Const msVALTYPE_AAA As String = "AAA" Private Const msVALTYPE_BBBB As String = "BBBB"
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) ValidateTextBoxUserEntering KeyAscii, msVALTYPE_AB, Me.TextBox1 End Sub
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) ValidateTextBoxUserEntering KeyAscii, msVALTYPE_AAA, Me.TextBox2
End Sub
Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) ValidateTextBoxUserEntering KeyAscii, msVALTYPE_BBBB, Me.TextBox3 End Sub
Public Sub ValidateTextBoxUserEntering( _ ByVal KeyAscii As MSForms.ReturnInteger, _ ByVal sValidateType As String, _ ByVal oControl As MSForms.Control)
Select Case sValidateType Case msVALTYPE_AB Select Case Len(oControl.Text) Case Is < 2 KeyPressLettersOnly KeyAscii Case Is = 2 KeyPressSpaceOnly KeyAscii Case Is > 2 KeyPressNumbersOnly KeyAscii End Select
Case msVALTYPE_AAA Select Case Len(oControl.Text) Case Is < 3 KeyPressLettersOnly KeyAscii Case Is = 3 KeyPressSpaceOnly KeyAscii Case Is > 3 KeyPressNumbersOnly KeyAscii End Select
Case msVALTYPE_BBBB Select Case Len(oControl.Text) Case Is < 4 KeyPressLettersOnly KeyAscii Case Is = 4 KeyPressSpaceOnly KeyAscii Case Is > 4 KeyPressNumbersOnly KeyAscii End Select
End Select End Sub
Public Sub KeyPressNumbersOnly(ByVal KeyAscii As MSForms.ReturnInteger) Select Case KeyAscii Case vbKey0 To vbKey9, vbKeyBack Case Else Beep KeyAscii = 0 End Select End Sub
Public Sub KeyPressLettersOnly(ByVal KeyAscii As MSForms.ReturnInteger) Select Case UCase(Chr(KeyAscii)) Case "A", "B", "C", "D", "E", "F", "G", "H", "I", _ "J", "K", "L", "M", "N", "O", "P", "Q", "R", _ "S", "T", "U", "V", "W", "Y", "X", "Z", vbKeyBack Case Else Beep KeyAscii = 0 End Select End Sub
Public Sub KeyPressSpaceOnly(ByVal KeyAscii As MSForms.ReturnInteger) Select Case KeyAscii Case vbKeySpace, vbKeyBack Case Else Beep KeyAscii = 0 End Select End Sub
Hej Flemming Der er ikke tale om 3 textboxe, men kun om én, som skal kunne rumme de tre typer indtastninger. Det er checkboxene, der afgør hvilken af de tre typer det skal være. De to typer er faste navne AAA og BBBB. Den tredje type kan være alle kombinationer af bogstaver -ligesom en nummerplade. Håber du har mod på at arbejde videre med den.
Hejsa - jep, jeg har fanget dit ønske, men min tid håbede at du selv kunne komme videre derfra. Checkboxe eller optionbuttons... der kan typisk foretages flere valg, når det er checkboxe og kun et valg når der er optionbuttons, hvorfor jeg nok ville bruge dem istedet. Download en demo for spørgsmål 819811 her http://www.smartoffice.dk/Tips/Eksperten/Index.asp
Hej Flemming Jeg har prøvet din kode, men kan ikke få den til at virker. Når jeg vælger ab, kan jeg taste 2 bogstaver og ikke mere når jeg vælger AAA og BBBB kan jeg kun indtaste tal? Hvad går der galt?
Det går ikke noget galt, det virker efter mit design.
Når du vælger: AB - kan du taste 2 bogstaver, så et mellemrum og derefter flere tal AAA - så skrives AAA foran textboksen og du kan kun skrive tal BBBB - så skrives BBBB foran textboksen og du kan kun skrive tal
Grunden til at jeg har gjort det med AAA og BBBB er, at du skriver det et fast format, og med et fast format forstår jeg noget, som brugeren ikke kan ændre/ikke behøves at indtaste, hvorfor det er vist i en label. Når du trykker OK vil det blive sat sammen med de tal du har indtastet.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.