Avatar billede hubertus Seniormester
18. september 2006 - 16:57 Der er 58 kommentarer og
3 løsninger

Inputmaske i en userform

Hvordan kan man i en Userform styre en brugers indtastning, således at man får det samme format skrevet i en celle på regnearket. Eks. Indtastning af bilnumre: i cellen vil jeg have følgende format:  UB 12345. Kan det gøres i Userformen, eller skal det ske når data skrives i regnearket?

mvh.
Hubertus
Avatar billede gider_ikke_mere Nybegynder
18. september 2006 - 18:25 #1
Sæt Controlsource til cellens adresse.
Avatar billede gider_ikke_mere Nybegynder
18. september 2006 - 18:30 #2
Hvis det er en TextBox. Marker den i VBA vinduet. I properties skriver du ved Controlsource A1. Hvis du bruger Application.Screenupdating = False, eller lignende, kan det være nødvendigt ved exit, at skrive værdien til cellen. Det er nemlig TextBox'en der følger cellen!
Avatar billede hubertus Seniormester
18. september 2006 - 19:21 #3
Nu kender jeg ikke cellens adresse før indholdet af userformen indføres i regnearket. Der er tale om et ark, hvor den sub der skriver data til regnearket finder første linie uden indhold. eks. der er f.eks. 100 linier, og der skrives så til linie 101. Linien kendes ikke, når brugeren indtaster i userformen. Det optimale er, hvis man kan lave en indtastningsmaske i userformen.
mvh. Hubertus
Avatar billede gider_ikke_mere Nybegynder
18. september 2006 - 19:31 #4
Du kan, fra formen, bruge
Nederste = Range("A65536").End(xlUp).Row
til at finde hvor i arket du er. Du skal selvfølgelig ændre Range("A til den pågældende kolonne.
Avatar billede gider_ikke_mere Nybegynder
18. september 2006 - 19:40 #5
Du kan så, med

Nederste = Range("A65536").End(xlUp).Row 'sætter rowsource til nederste celle i kolonne A
TextBox1.ControlSource = "A" & Nederste

... sætte controlsource, mens du ændrer i Formen.
Avatar billede excelent Ekspert
18. september 2006 - 21:15 #6
Avatar billede hubertus Seniormester
18. september 2006 - 21:28 #7
-> akyhne - jeg vil afprøve dit forslag i morgen

-> excelent - er det muligt at man via koden kan få den til automatisk at springe mellemrummet over, når de 2 først bogstaver er indtastet? ligeledes vil det være fint, hvis indtastningen er ufølsom overfor store/små bogstaver - men det som skrives i cellen er store bogstaver?
mvh.
Hubertus
Avatar billede excelent Ekspert
18. september 2006 - 21:34 #8
I teorien er jeg ret sikker på det kan gøres,
men om mine evner rækker, ved jeg ikke, (første gang jeg prøver)
kikker på det- ved ikke hvor meget jeg når i dag.
Avatar billede gider_ikke_mere Nybegynder
18. september 2006 - 21:34 #9
Private Sub TextBox1_Change()
If Len(Me.TextBox1.Text) = 2 Then
    Me.TextBox1.Text = Me.TextBox1.Text & " "
End If
End Sub

Den driller dog, når du sletter. Når der mangler 3 tegn til sletning, gendanner den mellemrummet! Brug Shift+Home til at markere de sidste 3 tegn for sletning.
Avatar billede gider_ikke_mere Nybegynder
18. september 2006 - 21:38 #10
Store bogstaver - den lette: Me.TextBox1.Text = UCase(Me.TextBox1.Text)

Private Sub TextBox1_Change()
Me.TextBox1.Text = UCase(Me.TextBox1.Text)
End Sub
Avatar billede gider_ikke_mere Nybegynder
18. september 2006 - 21:39 #11
Tilsammen:

Private Sub TextBox1_Change()
If Len(Me.TextBox1.Text) = 2 Then
    Me.TextBox1.Text = Me.TextBox1.Text & " "
End If
Me.TextBox1.Text = UCase(Me.TextBox1.Text)
End Sub
Avatar billede hubertus Seniormester
18. september 2006 - 21:53 #12
- akyhne: Det ser lovende ud. dog er problematikken omkring sletning ikke så heldig. Er der en løsning på den?  Kan man sikre sig at de første felter er tekst og de resterende er tal? Kan man give brugeren en meddelelse om hvad der forventes?

-> excelent: din henvisning til det tidligere spørgsmål ligner meget det jeg havde brug for - ser frem til dit løsningsforslag :-)

mvh.
Hubertus
Avatar billede gider_ikke_mere Nybegynder
18. september 2006 - 22:00 #13
Hmm, så skal du umiddelbart ind og rode i noget med tastetryk. Det med validering kan man sagtens, men det er en lidt længere løsning.
Avatar billede gider_ikke_mere Nybegynder
18. september 2006 - 22:14 #14
Der er i øvrigt helt specielle regler for hvilke forbogstaver, der i danske nummerplader, er! Dem kender jeg ikke.
Avatar billede kabbak Professor
18. september 2006 - 22:16 #15
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

If KeyAscii = Chr(8) Then
Else
If Len(Me.TextBox1.Text) = 2 Then
If IsNumeric(Left(TextBox1.Text, 1)) Or IsNumeric(Mid(TextBox1.Text, 2, 1)) Then MsgBox " De 2 første tegn, skal være bogstaver"
    Me.TextBox1.Text = Me.TextBox1.Text & " "
End If
Me.TextBox1.Text = UCase(Me.TextBox1.Text)
End If

End Sub
Avatar billede kabbak Professor
18. september 2006 - 22:23 #16
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii = Chr(8) Then    ' BACKSPACE
    Else
        If Len(Me.TextBox1.Text) = 2 Then
            If IsNumeric(Left(TextBox1.Text, 1)) Or IsNumeric(Mid(TextBox1.Text, 2, 1)) Then MsgBox " De 2 første tegn, skal være bogstaver"
            Me.TextBox1.Text = Me.TextBox1.Text & " "
        End If
        If Len(Me.TextBox1.Text) > 3 Then
            If Not IsNumeric(Mid(Me.TextBox1.Text, 4, Len(Me.TextBox1.Text) - 3)) Then
                MsgBox " De 2 første tegn, skal være bogstaver, resten tal"
            End If
        End If
        Me.TextBox1.Text = UCase(Me.TextBox1.Text)
    End If
End Sub
Avatar billede gider_ikke_mere Nybegynder
18. september 2006 - 22:27 #17
For filen kabbak... vi andre kan ikke følge med ;-)
Avatar billede hubertus Seniormester
19. september 2006 - 06:42 #18
->akyhne har ret - det er svært at følge med.

-> Kabbak - Din kode tager udgangspunkt i at cellen - her M1 er kendt, men jeg skal bruge den i to situationer:
1. i en søgerutine,
2. hvor der skal skrives i første ledige række.

Hvordan klares den? Til nr. 2 kan man bruge akyhnes forslag fra 18/09-2006 19:40:18? vil afprøve det senere.
mvh Hubertus
Avatar billede hubertus Seniormester
19. september 2006 - 06:42 #19
->akyhne har ret - det er svært at følge med - men flot arbejde
Avatar billede kabbak Professor
19. september 2006 - 08:15 #20
2. Første ledige nederst i A kolonnen er:
  Range("A65536").End(xlUp).Offset(1,0)

1. hvad vil du søge og hvor ??
Avatar billede hubertus Seniormester
19. september 2006 - 12:06 #21
Arket er en registrering af biler, hvor der dels tilføjes nye biler, dels skal kunne søges i eksisterende biler.
Avatar billede gider_ikke_mere Nybegynder
19. september 2006 - 12:19 #22
Hvad med navnenummerplader?
Avatar billede hubertus Seniormester
19. september 2006 - 17:55 #23
-> akyhne: du har ret, men de vil næppe optræde i denne kategori af biler (erhvervsbiler).
Avatar billede gider_ikke_mere Nybegynder
19. september 2006 - 18:19 #24
Hmmm, jo netop!
Avatar billede kabbak Professor
19. september 2006 - 22:14 #25
Hvis nummeret står i kolonne A, så er søg og gem her, på en command knap.

Private Sub Cmd_Søg_Click()
    Dim RW As Long, I As Long, Nummerplader As Variant, Svar As String
    RW = Range("A65536").End(xlUp).Row
    Nummerplader = Range("A1:A" & RW)
    For I = 1 To RW
        If Nummerplader(I, 1) = Me.TextBox1.Text Then
            MsgBox " Nummeret eksisterer på række " & I
            Exit Sub
        End If
    Next

    Svar = MsgBox(" nummeret er ikke fundet" & vbCrLf _
                & " skal det tilføjes ", vbYesNo)
    If Svar = vbYes Then

    End If
    Range("A65536").End(xlUp).Offset(1, 0) = Me.TextBox1.Text

End Sub
Avatar billede hubertus Seniormester
20. september 2006 - 06:31 #26
-> Kabbak: Det ser meget ud som det jeg søger. Jeg afprøver den senere i dag.
Et afklarende spørgsmål: Hvornår bruger man me.textbox1.text og hvornår bruger man textbox1.text. mao. hvilken funktion har me?
mvh. Hubertus
Avatar billede gider_ikke_mere Nybegynder
20. september 2006 - 09:09 #27
me deklarerer bare at tekstboksen er på selve formlen, altså me=på mig selv. Som regel er det nok at udelukke me, men det er sikrest, altid først at skrive me.

Fordelen er også at så snart du skriver me. findes alle objekter på formen, og medtages i dine valg.
Avatar billede hubertus Seniormester
27. september 2006 - 15:12 #28
Hej igen - tilbage fra the big blue - derfor min passivitet.
-> Kabbak din koden virker perfekt. jeg er siden blevet stillet spørgsmålet om det er muligheden for at håndtere to inputmasker: et som den hidtidige  dk xx.xxx og et som ser således ud. dkdk 1234. Det første er et alm. bilnummer mens den sidste er et transportnummer. Kan det indholdes i samme felt, eller er jeg nødt til at lave et nyt indtastningsfelt?
mvh. Hubertus
Avatar billede kabbak Professor
27. september 2006 - 18:19 #29
Lige en rettelse til den sidste.

Private Sub Cmd_Søg_Click()
    Dim RW As Long, I As Long, Nummerplader As Variant, Svar As String
    RW = Range("A65536").End(xlUp).Row
    Nummerplader = Range("A1:A" & RW)
    For I = 1 To RW
        If Nummerplader(I, 1) = Me.TextBox1.Text Then
            MsgBox " Nummeret eksisterer på række " & I
            Exit Sub
        End If
    Next

    Svar = MsgBox(" nummeret er ikke fundet" & vbCrLf _
                & " skal det tilføjes ", vbYesNo)
    If Svar = vbYes Then
        Range("A65536").End(xlUp).Offset(1, 0) = Me.TextBox1.Text
    End If
End Sub

Dit sidste spørgsmål on dkdk1234, skal det stå i samme celle som nummerpladen eller har det sit egen celle.
Hvis det har sin egen skal du lave en anden tekstboks.
Avatar billede hubertus Seniormester
27. september 2006 - 19:49 #30
Det er enten den ene eller den anden den anden form for indtastning der skal anvendes, og helst i samme tekstboks.
Avatar billede kabbak Professor
27. september 2006 - 21:34 #31
Vil de sige at du både har bilnummer og transportnummer i samme kolonne, de koder du har fået bruger samme kollonne, så de er ikke nemme at genbruge, hvis de står i 2 forskellige kollonner.
Avatar billede hubertus Seniormester
27. september 2006 - 21:51 #32
transportnumrene er blot en anden måde at registre en trailer på, der skal de stå i samme kolonne.
Avatar billede kabbak Professor
27. september 2006 - 22:10 #33
Ok, men så skal du lave 2 option butten, kald den ene for trailer og den anden for bil.

så tjekker vi for hvilken som er sat til true
Avatar billede kabbak Professor
27. september 2006 - 22:18 #34
så vil koden se sådan ud

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    If KeyAscii = Chr(8) Then    ' BACKSPACE
    Else
        If Bil = True Then
     
            If Len(Me.TextBox1.Text) = 2 Then
                If IsNumeric(Left(TextBox1.Text, 1)) Or IsNumeric(Mid(TextBox1.Text, 2, 1)) Then MsgBox " De 2 første tegn, skal være bogstaver"
                Me.TextBox1.Text = Me.TextBox1.Text & " "
            End If
            If Len(Me.TextBox1.Text) > 3 Then
                If Not IsNumeric(Mid(Me.TextBox1.Text, 4, Len(Me.TextBox1.Text) - 3)) Then
                    MsgBox " De 2 første tegn, skal være bogstaver, resten tal"
                End If
            End If

        Else

            If Len(Me.TextBox1.Text) = 4 Then
                If IsNumeric(Left(TextBox1.Text, 1)) Or IsNumeric(Mid(TextBox1.Text, 2, 1)) _
                  Or IsNumeric(Mid(TextBox1.Text, 3, 1)) Or IsNumeric(Mid(TextBox1.Text, 4, 1)) _
                  Then MsgBox " De 4 første tegn, skal være bogstaver"
                Me.TextBox1.Text = Me.TextBox1.Text & " "
            End If
            If Len(Me.TextBox1.Text) > 5 Then
                If Not IsNumeric(Mid(Me.TextBox1.Text, 6, Len(Me.TextBox1.Text) - 5)) Then
                    MsgBox " De 4 første tegn, skal være bogstaver, resten tal"
                End If
            End If

        End If
        Me.TextBox1.Text = UCase(Me.TextBox1.Text)
    End If
End Sub
Avatar billede hubertus Seniormester
28. september 2006 - 20:59 #35
-> Kabak - koden virker ikke helt efter hensigten, da den fokucere på 4 bogstaver + 3 tal (burde være 4). Hvis jeg forsøger at indtaste 2 bogstaver + 5 tal, så får jeg en meddelelse om at de 4 første skal være bogstaver. Hvis jeg derimod indtaster 4 bogstaver og 3 tal, så virker den perfekt. Kan du gennemskue årsagen?
Avatar billede kabbak Professor
28. september 2006 - 21:05 #36
Den ene optionbotten, har du navngivet den som Bil ??
og den anden optionbotten ,har du navngivet den som Trailer

Der er ikke begrænsninger på længden af tegn efter mellemrummet.
Avatar billede kabbak Professor
28. september 2006 - 21:06 #37
Hvis option butten Bil er markeret kører første del af koden, ellers den anden
Avatar billede hubertus Seniormester
28. september 2006 - 21:19 #38
-> der var lige en detalje som jeg havde overset, så nu virker det :-)
Er det muligt at ændre koden lidt, således at følgende situation undgås:

der er valg bil
brugeren får ved en fejl indtastet 3 bogstaver.
Ved det fjerde bogstav kommer en boks med en fejltekst.
I tekstboksen står nu de 4 bogstaver parvis.

Det ville være fint, hvis et tryk på ok, samtidig slettede de to sidste bogstaver, således at cursoren stod i den første position, hvori der skal indtastes tal.
Avatar billede kabbak Professor
28. september 2006 - 22:05 #39
Det er ikke muligt i den funktion koden kører(KeyPress), den kører nemelig inden tegnet er kommet ind i tekstboksen.
KeyPress er når tasten er trykket ned og ikke sluppet endnu, så det sidste tegn, hænger så at sige i luften,
Avatar billede kabbak Professor
29. september 2006 - 08:22 #40
Ok jeg har prøvet her og fordelt koden i 2 events.

Private Sub TextBox1_Change()
    If Bil Then
        If Len(Me.TextBox1.Text) > 3 Then
            If Not IsNumeric(Mid(Me.TextBox1.Text, 4, Len(Me.TextBox1.Text) - 3)) Then
                MsgBox " De 2 første tegn, skal være bogstaver, resten tal"
                Me.TextBox1.Text = Left(Me.TextBox1.Text, 3)
            End If
        End If
    Else
        If Len(Me.TextBox1.Text) > 5 Then
            If Not IsNumeric(Mid(Me.TextBox1.Text, 6, Len(Me.TextBox1.Text) - 5)) Then
                MsgBox " De 4 første tegn, skal være bogstaver, resten tal"
                Me.TextBox1.Text = Left(Me.TextBox1.Text, 5)
            End If
        End If
    End If
    Me.TextBox1.Text = UCase(Me.TextBox1.Text)
End Sub
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    If KeyAscii = Chr(8) Then    ' BACKSPACE
    Else
        If Bil = True Then
            If Len(Me.TextBox1.Text) = 2 Then
                If IsNumeric(Left(TextBox1.Text, 1)) Or IsNumeric(Mid(TextBox1.Text, 2, 1)) Then MsgBox " De 2 første tegn, skal være bogstaver"
                Me.TextBox1.Text = Me.TextBox1.Text & " "
            End If
        Else
            If Len(Me.TextBox1.Text) = 4 Then
                If IsNumeric(Left(TextBox1.Text, 1)) Or IsNumeric(Mid(TextBox1.Text, 2, 1)) _
                  Or IsNumeric(Mid(TextBox1.Text, 3, 1)) Or IsNumeric(Mid(TextBox1.Text, 4, 1)) _
                  Then MsgBox " De 4 første tegn, skal være bogstaver"
                Me.TextBox1.Text = Me.TextBox1.Text & " "
            End If
        End If
    End If
End Sub
Avatar billede hubertus Seniormester
29. september 2006 - 14:56 #41
Det ser rigtigt godt ud mht. bil delen. Kan du også få den til at dække transportnummer valget også, så vil det være helt i top.

mvh. Hubertus
Avatar billede kabbak Professor
29. september 2006 - 14:59 #42
det skulle være iorden, hvad er problemet .
Avatar billede hubertus Seniormester
29. september 2006 - 15:07 #43
problemet opstår, hvis brugeren taster f.eks. 2 bogstaver og 2 tal.
vil du knytte nogle kommentarer til din kode?
Avatar billede hubertus Seniormester
29. september 2006 - 15:30 #44
ups jeg glemte lige at skrive at ovennævnte problem opstår, når trailer er markeret - ikke helt uvæsentlig. :-)
Avatar billede kabbak Professor
29. september 2006 - 19:48 #45
Private Sub TextBox1_Change()
    If Bil Then
        ' Bilkoden
        If Len(Me.TextBox1.Text) > 3 Then
            If Not IsNumeric(Right(TextBox1.Text, 1)) Then    ' Tjekker at de 3 første tegn er tekst(Mellemrummet) tælles med
                MsgBox " De 2 første tegn, skal være bogstaver, resten tal"    ' Hvis tal så besked
                Me.TextBox1.Text = Left(Me.TextBox1.Text, Len(Me.TextBox1.Text) - 1)    ' sletter det forkert intastede
            End If
        Else
            If IsNumeric(Right(TextBox1.Text, 1)) Then    ' Tjekker om resten er tal
                MsgBox " De 2 første tegn, skal være bogstaver"    ' Hvis ikke tal så besked
                Me.TextBox1.Text = Left(Me.TextBox1.Text, Len(Me.TextBox1.Text) - 1)    ' sletter det forkert intastede
            End If
        End If
    Else
        ' Trailer koden
        If Len(Me.TextBox1.Text) > 5 Then
            If Not IsNumeric(Right(TextBox1.Text, 1)) Then    ' Tjekker at de 5 første tegn er tekst(Mellemrummet) tælles med
                MsgBox " De 4 første tegn, skal være bogstaver, resten tal"    ' Hvis tal så besked
                Me.TextBox1.Text = Left(Me.TextBox1.Text, Len(Me.TextBox1.Text) - 1)    ' sletter det forkert intastede
            End If
        Else
            If IsNumeric(Right(TextBox1.Text, 1)) Then
                MsgBox " De 4 første tegn, skal være bogstaver"    ' Tjekker om resten er tal
                Me.TextBox1.Text = Left(Me.TextBox1.Text, Len(Me.TextBox1.Text) - 1)    ' sletter det forkert intastede
            End If
        End If
    End If
    Me.TextBox1.Text = UCase(Me.TextBox1.Text)    ' Lavet teksten til store bogstaver
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    If KeyAscii = Chr(8) Then    ' BACKSPACE, for at kunne slette i tekstboksen
    Else
        If Bil = True Then    ' OptionButten bil er afmærket
            If Len(Me.TextBox1.Text) = 2 Then
                Me.TextBox1.Text = Me.TextBox1.Text & " "    ' Sætter et mellemrum efter de 2 bogstaver
            End If
        Else
            ' OptionButten bil er ikke afmærket
            If Len(Me.TextBox1.Text) = 4 Then
                Me.TextBox1.Text = Me.TextBox1.Text & " "    ' Sætter et mellemrum efter de 4 bogstaver
            End If
        End If
    End If
End Sub
Avatar billede kabbak Professor
29. september 2006 - 20:36 #46
Jeg havde byttet om på beskrivelserne

Private Sub TextBox1_Change()
    If Bil Then
        ' Bilkoden
        If Len(Me.TextBox1.Text) > 3 Then
            If Not IsNumeric(Right(TextBox1.Text, 1)) Then ' Tjekker om resten er tal
                MsgBox " De 2 første tegn, skal være bogstaver, resten tal" 'Hvis ikke tal så besked
                Me.TextBox1.Text = Left(Me.TextBox1.Text, Len(Me.TextBox1.Text) - 1)    ' sletter det forkert intastede
            End If
        Else
            If IsNumeric(Right(TextBox1.Text, 1)) Then ' Tjekker at de 3 første tegn er tekst(Mellemrummet) tælles med
                MsgBox " De 2 første tegn, skal være bogstaver"    ' Hvis tal så besked
                Me.TextBox1.Text = Left(Me.TextBox1.Text, Len(Me.TextBox1.Text) - 1)    ' sletter det forkert intastede
            End If
        End If
    Else
        ' Trailer koden
        If Len(Me.TextBox1.Text) > 5 Then
            If Not IsNumeric(Right(TextBox1.Text, 1)) Then ' Tjekker om resten er tal
                MsgBox " De 4 første tegn, skal være bogstaver, resten tal" 'Hvis ikke tal så besked
                Me.TextBox1.Text = Left(Me.TextBox1.Text, Len(Me.TextBox1.Text) - 1)    ' sletter det forkert intastede
            End If
        Else
            If IsNumeric(Right(TextBox1.Text, 1)) Then ' Tjekker at de 5 første tegn er tekst(Mellemrummet) tælles med
                MsgBox " De 4 første tegn, skal være bogstaver" ' Hvis tal så besked
                Me.TextBox1.Text = Left(Me.TextBox1.Text, Len(Me.TextBox1.Text) - 1)    ' sletter det forkert intastede
            End If
        End If
    End If
    Me.TextBox1.Text = UCase(Me.TextBox1.Text)    ' Lavet teksten til store bogstaver
End Sub


    If KeyAscii = Chr(8) Then    ' BACKSPACE, for at kunne slette i tekstboksen
    Else
        If Bil = True Then    ' OptionButten bil er afmærket
            If Len(Me.TextBox1.Text) = 2 Then
                Me.TextBox1.Text = Me.TextBox1.Text & " "    ' Sætter et mellemrum efter de 2 bogstaver
            End If
        Else
            ' OptionButten bil er ikke afmærket
            If Len(Me.TextBox1.Text) = 4 Then
                Me.TextBox1.Text = Me.TextBox1.Text & " "    ' Sætter et mellemrum efter de 4 bogstaver
            End If
        End If
    End If
End Sub
Avatar billede kabbak Professor
29. september 2006 - 20:37 #47
Jeg havde byttet om på beskrivelserne

Private Sub TextBox1_Change()
    If Bil Then
        ' Bilkoden
        If Len(Me.TextBox1.Text) > 3 Then
            If Not IsNumeric(Right(TextBox1.Text, 1)) Then ' Tjekker om resten er tal
                MsgBox " De 2 første tegn, skal være bogstaver, resten tal" 'Hvis ikke tal så besked
                Me.TextBox1.Text = Left(Me.TextBox1.Text, Len(Me.TextBox1.Text) - 1)    ' sletter det forkert intastede
            End If
        Else
            If IsNumeric(Right(TextBox1.Text, 1)) Then ' Tjekker at de 3 første tegn er tekst(Mellemrummet) tælles med
                MsgBox " De 2 første tegn, skal være bogstaver"    ' Hvis tal så besked
                Me.TextBox1.Text = Left(Me.TextBox1.Text, Len(Me.TextBox1.Text) - 1)    ' sletter det forkert intastede
            End If
        End If
    Else
        ' Trailer koden
        If Len(Me.TextBox1.Text) > 5 Then
            If Not IsNumeric(Right(TextBox1.Text, 1)) Then ' Tjekker om resten er tal
                MsgBox " De 4 første tegn, skal være bogstaver, resten tal" 'Hvis ikke tal så besked
                Me.TextBox1.Text = Left(Me.TextBox1.Text, Len(Me.TextBox1.Text) - 1)    ' sletter det forkert intastede
            End If
        Else
            If IsNumeric(Right(TextBox1.Text, 1)) Then ' Tjekker at de 5 første tegn er tekst(Mellemrummet) tælles med
                MsgBox " De 4 første tegn, skal være bogstaver" ' Hvis tal så besked
                Me.TextBox1.Text = Left(Me.TextBox1.Text, Len(Me.TextBox1.Text) - 1)    ' sletter det forkert intastede
            End If
        End If
    End If
    Me.TextBox1.Text = UCase(Me.TextBox1.Text)    ' Lavet teksten til store bogstaver
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    If KeyAscii = Chr(8) Then    ' BACKSPACE, for at kunne slette i tekstboksen
    Else
        If Bil = True Then    ' OptionButten bil er afmærket
            If Len(Me.TextBox1.Text) = 2 Then
                Me.TextBox1.Text = Me.TextBox1.Text & " "    ' Sætter et mellemrum efter de 2 bogstaver
            End If
        Else
            ' OptionButten bil er ikke afmærket
            If Len(Me.TextBox1.Text) = 4 Then
                Me.TextBox1.Text = Me.TextBox1.Text & " "    ' Sætter et mellemrum efter de 4 bogstaver
            End If
        End If
    End If
End Sub
Avatar billede hubertus Seniormester
30. september 2006 - 07:42 #48
Hej Kabbak - det er bare superflot arbejde - respekt for det!  :-)
Hvor sætter du længen af indtastningsfeltet i textboxen?  i trailerdelen er der nemlig kun mulighed for 4 bogstaver og 3 tal, og der skal være 4 bogstaver og 4 tal.

Kan man i bildelen få indsat et punktum eller et mellemrum i taldelen, således at formatet er UM 23 345? (for læsevenlighedens skyld)
mvh. hubertus
Avatar billede hubertus Seniormester
30. september 2006 - 07:53 #49
Hej igen - jeg har fundet længden af feltet under egenskaben max længden, så hvis du kan løse sidste del af spørgsmålet ang. bildelen er jeg en glad mand :-)
Avatar billede kabbak Professor
30. september 2006 - 10:22 #50
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    If KeyAscii = Chr(8) Then    ' BACKSPACE, for at kunne slette i tekstboksen
    Else
        If Bil = True Then    ' OptionButten bil er afmærket
      If Len(Me.TextBox1.Text) = 2 or  Len(Me.TextBox1.Text) = 5 Then                Me.TextBox1.Text = Me.TextBox1.Text & " "    ' Sætter et mellemrum efter de 2 bogstaver og igen efter 2 tal
            End If
        Else
            ' OptionButten bil er ikke afmærket
            If Len(Me.TextBox1.Text) = 4 Then
                Me.TextBox1.Text = Me.TextBox1.Text & " "    ' Sætter et mellemrum efter de 4 bogstaver
            End If
        End If
    End If
End Sub
Avatar billede kabbak Professor
30. september 2006 - 10:24 #51
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii = Chr(8) Then    ' BACKSPACE, for at kunne slette i tekstboksen
    Else
        If Bil = True Then    ' OptionButten bil er afmærket
      If Len(Me.TextBox1.Text) = 2 Or Len(Me.TextBox1.Text) = 5 Then
      Me.TextBox1.Text = Me.TextBox1.Text & " "  ' Sætter et mellemrum efter de 2 bogstaver og igen efter 2 tal
            End If
        Else
            ' OptionButten bil er ikke afmærket
            If Len(Me.TextBox1.Text) = 4 Then
                Me.TextBox1.Text = Me.TextBox1.Text & " "    ' Sætter et mellemrum efter de 4 bogstaver
            End If
        End If
    End If
End Sub
Avatar billede hubertus Seniormester
30. september 2006 - 19:39 #52
-  den sidste kode virker ikke efter hensigten. Når jeg taster tal nr. 3, så kommer msgboxen med følgende: De 2 første tegn, skal være bogstaver, resten tal". trykkes ok indsættes det tal, som udløste msgboxen, hvorefter man kan indtaste resten. - men der indsættes ingen mellemrum.

mvh. Hubertus
Avatar billede kabbak Professor
01. oktober 2006 - 11:57 #53
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii = Chr(8) Then    ' BACKSPACE, for at kunne slette i tekstboksen
    Else
        If Bil = True Then    ' OptionButten bil er afmærket
      If Len(Me.TextBox1.Text) = 2 Or Len(Me.TextBox1.Text) = 5 Then
      Me.TextBox1.Text = Me.TextBox1.Text & " "  ' Sætter et mellemrum efter de 2 bogstaver og igen efter 2 tal
            End If
        Else
            ' OptionButten bil er ikke afmærket
            If Len(Me.TextBox1.Text) = 4 Then
                Me.TextBox1.Text = Me.TextBox1.Text & " "    ' Sætter et mellemrum efter de 4 bogstaver
            End If
        End If
    End If
End Sub
Private Sub TextBox1_Change()
    If Bil Then
        ' Bilkoden
        If Len(Me.TextBox1.Text) > 3 And Len(Me.TextBox1.Text) <> 6 Then
            If Not IsNumeric(Right(TextBox1.Text, 1)) Then ' Tjekker om resten er tal
                MsgBox " De 2 første tegn, skal være bogstaver, resten tal" 'Hvis ikke tal så besked
                Me.TextBox1.Text = Left(Me.TextBox1.Text, Len(Me.TextBox1.Text) - 1)    ' sletter det forkert intastede
            End If
        Else
            If IsNumeric(Right(TextBox1.Text, 1)) Then ' Tjekker at de 3 første tegn er tekst(Mellemrummet) tælles med
                MsgBox " De 2 første tegn, skal være bogstaver"    ' Hvis tal så besked
                Me.TextBox1.Text = Left(Me.TextBox1.Text, Len(Me.TextBox1.Text) - 1)    ' sletter det forkert intastede
            End If
        End If
    Else
        ' Trailer koden
        If Len(Me.TextBox1.Text) > 5 Then
            If Not IsNumeric(Right(TextBox1.Text, 1)) Then ' Tjekker om resten er tal
                MsgBox " De 4 første tegn, skal være bogstaver, resten tal" 'Hvis ikke tal så besked
                Me.TextBox1.Text = Left(Me.TextBox1.Text, Len(Me.TextBox1.Text) - 1)    ' sletter det forkert intastede
            End If
        Else
            If IsNumeric(Right(TextBox1.Text, 1)) Then ' Tjekker at de 5 første tegn er tekst(Mellemrummet) tælles med
                MsgBox " De 4 første tegn, skal være bogstaver" ' Hvis tal så besked
                Me.TextBox1.Text = Left(Me.TextBox1.Text, Len(Me.TextBox1.Text) - 1)    ' sletter det forkert intastede
            End If
        End If
    End If
    Me.TextBox1.Text = UCase(Me.TextBox1.Text)    ' Lavet teksten til store bogstaver
End Sub
Avatar billede hubertus Seniormester
01. oktober 2006 - 16:10 #54
Den er bare helt i top - opgaven løst - og mere til. Tusinde tak for hjælpen.

Lægger du et svar, så pointene kan skifte ejermand.

mvh. Hubertus
Avatar billede kabbak Professor
01. oktober 2006 - 17:11 #55
svar
Avatar billede hubertus Seniormester
01. oktober 2006 - 19:29 #56
Jeg opretter lige et nyt spg. med nogle flere point - du har fortjent det.

mvh. Hubertus
Avatar billede hubertus Seniormester
02. oktober 2006 - 16:13 #57
et lille tillægsspørgsmål til ovenstående. Længden af textboxen, hvori bilnummeret indtastes kan sættes i egenskaber for tekstboxen i feltet maxlength. Kan jeg via en kode bestemme længden?
mvh. Hubertus
Avatar billede kabbak Professor
02. oktober 2006 - 16:20 #58
Me.TextBox1.MaxLength = 9
Avatar billede gider_ikke_mere Nybegynder
02. oktober 2006 - 16:21 #59
Me.TextBox1.MaxLength = 2
Avatar billede gider_ikke_mere Nybegynder
02. oktober 2006 - 16:21 #60
Nå, du var hurtigst, kabbak ;-)
Avatar billede gider_ikke_mere Nybegynder
02. oktober 2006 - 16:23 #61
Husk at gøre det ved start af Userform, ellers kan man nå at skrive flere tegn.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester