Avatar billede steensommer Praktikant
03. januar 2004 - 13:58 Der er 56 kommentarer og
2 løsninger

Kontrol af input i Userform

Hej
Her er flere spørgsmål som jeg håber nogle kan hjælpe med -desværre fedter jeg lidt med point - har snart ikke flere tilbage :0(
Jeg har oprettet en userform: FrmRegistrering til indtastning af data i en projektmappe - dette er gjort med en: Multipage.
Jeg har følgende problemer:
1) Jeg ville gerne vha vba kunne returnere til ex: Page1, textbox37 - hvorledes gøre dette?
2)Er det ikke muligt at "styre" input'et bedre: Cpr skal indtastes med bindestreg og modtagne celler i projektmappen er formateret som text (for at kunne beregne alderen). Spørgsmål: Kan man få textboxen til at vise: - (ligesom i Access)
3)Jeg har 2 dato-felter der i projektmappen er formateret: dd-mm-yy (har en engelsk excel 2002). Når jeg i textboxen ex. indtaster 01-03 bliver det på arket til 03-01 (altså en engelsk variant?).
Kender i en god homepage med Userform og dennes opbygning?

hilsen Steen
Avatar billede bak Forsker
03. januar 2004 - 14:21 #1
ad 1.
UserForm1.MultiPage1.Value = 0  'side 1
TextBox37.SetFocus
Avatar billede steensommer Praktikant
03. januar 2004 - 14:51 #2
-->bak. Det fungerede rigtig godt. Tak skal du ha'.
Avatar billede jkrons Professor
03. januar 2004 - 14:56 #3
ad 2: Textbokse har ikke inputmasker som i Access, men du kan knytte denne kode til din tekstboks:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Me!TextBox1 = Left(Me!TextBox1, 6) & "-" & Right(Me!TextBox1, 4)
End Sub
Avatar billede steensommer Praktikant
03. januar 2004 - 15:01 #4
--> jkrons. Det fungerer ikke rigtigt. Den beholder præcist det jeg har indtastet :0(
Avatar billede jkrons Professor
03. januar 2004 - 15:04 #5
Så har nok misforstået dig. Hvad præcis ønsker du at opnå at der skal stå i cellen?
Avatar billede steensommer Praktikant
03. januar 2004 - 15:06 #6
Indtastning af CPR-nr ex: 111111-1111 altså at bindestregen er synlig i textfeltet subsidiært at det indtastede ændres til eksemplet (hvis det indtastes uden bindestreg)
Avatar billede jkrons Professor
03. januar 2004 - 15:13 #7
Ok. Mit eksempel burde ændre et cpr-nummer tastet som 1212120001 til 121212-0001, men det går i så fald galgt, hvis bindestregen allerede er indtastet.

Hvis du af og til indtaster bindestregn og i andre tilfælde ikke kan du evt ændre koden til

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Len(Me!TextBox1) = 10 Then
        Me!TextBox1 = Left(Me!TextBox1, 6) & "-" & Right(Me!TextBox1, 4)
    End If
End Sub
Avatar billede steensommer Praktikant
03. januar 2004 - 15:17 #8
Det er lidt besynderligt - den ændrer desværre IKKE formatet ved exit selvom det er ændret til Textbox3
Avatar billede jkrons Professor
03. januar 2004 - 15:19 #9
Mystisk! Hos mig sætter den en - hvis jeg indtaster som 1212120001 og lader den stå, hvis jeg taster 121212-0001.
Avatar billede steensommer Praktikant
03. januar 2004 - 15:20 #10
Den lader den fint stå hvis man indtaster det men ændrer iøvrigt intet og så er intet jo opnået - øv. Det virker som om den intet gør?
Avatar billede jkrons Professor
03. januar 2004 - 15:24 #11
Det kan jeg ikke forklare. Som nævnt virker det fint hos mig.
Avatar billede steensommer Praktikant
03. januar 2004 - 15:39 #12
Jeg lavede en lille test:
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(Me.TextBox3) = 10 Then
        'Me.TextBox3 = Left(Me.TextBox3, 6) & "-" & Right(Me.TextBox3, 4)
        MsgBox ("Hmm")
End If
End Sub

Det viser sig at: Hmm først dukker op hvis jeg går ud af textboxen
Avatar billede jkrons Professor
03. januar 2004 - 15:41 #13
Exit indtræffer når du går ud af tekstboksen. Hvis det skal indtræffe allerede mens du taster skal du nok bruge Change eller noget i den stil.
Avatar billede steensommer Praktikant
03. januar 2004 - 15:42 #14
Undskyld - går ud af Userformen
Avatar billede jkrons Professor
03. januar 2004 - 15:43 #15
Private Sub TextBox1_Change()
If Len(Me!TextBox1) = 6 Then Me!TextBox1 = Me!TextBox1 & "-"
End Sub
Avatar billede jkrons Professor
03. januar 2004 - 15:44 #16
Hos mig indtræffer Exit hændelsen når jeg forlader textboksen, men der skal selvfølgelig være et sted (endnu et kontrolelement) at gå til.

Ovenstående sætter en bindestreg, når du har tastet 6 tegn.
Avatar billede steensommer Praktikant
03. januar 2004 - 15:47 #17
Det sidste fungerede godt jkrons - det var dejligt :0)  Du kan ikke tilfældigvis svare på ad) 3
Avatar billede jkrons Professor
03. januar 2004 - 16:07 #18
ad 3) Prøv med:

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    ActiveSheet.Range("a1") = Format(Me!TextBox2, "mm-dd")
End Sub

eller find evt en anden hændelse.
Og så skal tekstboksen eller ikke være knyttet direkte til en celle.
Avatar billede steensommer Praktikant
03. januar 2004 - 16:11 #19
Jeg må hellere forklare: Først når alle data er indtastet i userformen føres data til regneark vha vba. Dette gøres vha:
Sheets("Data").Range("B65536").End(xlUp).Offset(2, 0) = FrmRegistrering!TextBox3.Value
altså første ledige linie. Hvorledes kan ovenstående vba ændres til dette???
Avatar billede jkrons Professor
03. januar 2004 - 16:13 #20
Sheets("Data").Range("B65536").End(xlUp).Offset(2, 0) = format(FrmRegistrering!TextBox3.Value, "mm-dd") vil jeg tro.
Avatar billede steensommer Praktikant
03. januar 2004 - 16:24 #21
Jeg har lavet som følger uden at det har hjulpet (samme problem):
With Sheets("Data").Range("B65536").End(xlUp)
    .Offset(0, 2) = FrmRegistrering!TextBox6.Value
    .Offset(0, 3) = FrmRegistrering!TextBox8.Value
    .Offset(0, 4) = Format(FrmRegistrering!TextBox9.Value, "dd-mm")
    .Offset(0, 5) = FrmRegistrering!TextBox10.Value
    .Offset(0, 6) = Format(FrmRegistrering!TextBox11.Value, "dd-mm")
    .Offset(0, 7) = FrmRegistrering!TextBox12.Value
Avatar billede jkrons Professor
03. januar 2004 - 16:26 #22
Ret til "mm-dd" i stedet for "dd-mm" som jeg skrev i mit forslag.
Avatar billede bak Forsker
03. januar 2004 - 16:32 #23
prøv ellers
ActiveCell.Value = CDate(Format(TextBox1.Text, "dd-mm-yyyy"))
Avatar billede steensommer Praktikant
03. januar 2004 - 16:34 #24
Det første fungerer perfekt - jeg har ikke prøvet din bak (men den fungerer sikkert også) I er da geniale. Point til jer begge og tak for hjælpen :0) Fordeling 10:20?
Avatar billede bak Forsker
03. januar 2004 - 16:36 #25
fint med mig :-)
Avatar billede jkrons Professor
03. januar 2004 - 16:36 #26
Velbekomme!  Fordeling er ok med mig, men vi kan også dele lige over.
Avatar billede steensommer Praktikant
07. januar 2004 - 17:02 #27
--> bak. Jeg har prøvet din variant i anden sammenhæng - den fungerer perfekt :0) Tak for det.
Avatar billede bak Forsker
07. januar 2004 - 17:14 #28
velbekomme, Steen :-)
Avatar billede steensommer Praktikant
08. januar 2004 - 21:47 #29
--> Bak du lavede en gang en Userform1 (indholdende Listen der henter data fra en Access database) med følgende:
Sub UserForm_Initialize()
On Error Resume Next
ListBox1.List = listen
ListBox1.ColumnCount = 25
ListBox1.ColumnWidths = "35,65,80,65,100,70,50,40,40,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"
End Sub

Den har samme problem i felt 7 (50). Hvor den viser dato som 3/19/2000. Kan dt ikke ændres???
Avatar billede bak Forsker
09. januar 2004 - 09:35 #30
Har kigget lidt på det og kan ikke umiddelbart løse det, uden at smide hele "Listen" ned på et ark og hive det ind i listbox1 derfra.
Er det interessant ?
Avatar billede steensommer Praktikant
09. januar 2004 - 15:38 #31
Tak fordi du kiggede på det - nej jeg tror at Sekretariatet må acceptere tingenes tilstand og mon ikke det kan gå.
God weekend og tak for hjælpen igen.
Avatar billede bak Forsker
09. januar 2004 - 20:05 #32
en anden mulighed er at løbe den igennem og rette dato til en streng.
Sub UserForm_Initialize()
For X = Lbound(listen,1) to Ubound(Listen,1)
    Listen(X,7)=Cstr(Listen(X,7))
Next
On Error Resume Next
ListBox1.List = listen
ListBox1.ColumnCount = 25
ListBox1.ColumnWidths = "35,65,80,65,100,70,50,40,40,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"
End Sub
Avatar billede steensommer Praktikant
09. januar 2004 - 22:28 #33
Så lykkedes det alligevel - fantastisk. Tusinde tak.
Men ingen roser uden torne - den accepterer ikke længere at man indtaster et nul eller ingenting i søgefeltet - runtime error 13. Har du nogen ide om hvad det skyldes (det var der ikke før ændringen)
Avatar billede steensommer Praktikant
09. januar 2004 - 23:05 #34
Nå det blev bedre efter at On error resume next blev flyttet til toppen - det er vel ikke et problem - tilsyneladende fungerer det perfekt. Igen, igen tusinde tak for hjælpen. :0)
Avatar billede steensommer Praktikant
17. januar 2004 - 01:03 #35
-->bak. Jeg har endnu en listbox hvir jeg har samme dato-problem som ovenfor. Jeg har forsøgt at implementere det du skrev 09/01-2004 20:05:41. Men der fungerer ikke - eller det er måske snarere fordi jeg ikke forstår hvad du gør (og dermed kan rette den til). Datofeltet er i række 1. :0(
Avatar billede bak Forsker
17. januar 2004 - 11:08 #36
vis koden, steen, så jeg kan se hvad du gør ;-)
Avatar billede steensommer Praktikant
17. januar 2004 - 11:12 #37
Mener du denne (hurtigt overstået da det ikke har fungeret):
Private Sub UserForm_Initialize()
'On Error Resume Next
'ListBox1.List = listen
'For x = LBound(Listen, 1) To UBound(Listen, 1)
Listen(x, 0) = CStr(Listen(x, 0))
'Next
'Listen(x, 7) = CStr(Listen.List(x, 7))
ListBox1.ColumnCount = 8
'ListBox1.ColumnWidths = "90,80,90,100,90,90"
End Sub
Avatar billede steensommer Praktikant
17. januar 2004 - 11:17 #38
Jeg laver det for 1 der bruger excel 97 - dk. Selv bruger jeg XP - UK (lidt endnu). Det er dog noget forbistret roderi  :0)
Avatar billede bak Forsker
17. januar 2004 - 11:26 #39
Hvordan henter du "Listen" ?
Hvis det er fra et range findes listen(x,0) ikke.
Det skal være Listen(x,1).
Avatar billede steensommer Praktikant
17. januar 2004 - 11:27 #40
Fra denne kode:

Sub FindOptagneDyr()
Dim Data As Variant ' NY
Sheets("Resultat").Range("A2:H1000").ClearContents
UserForm1.ListBox1.Clear  ' NY
Application.ScreenUpdating = False
Dim Søg As String, twb As Workbook
Set twb = ThisWorkbook
Søg = InputBox("Indtast søgetekst")
If Søg <> "" Then
With Sheets("Optagne dyr").Range("D3:E1000")

    Set s = .Find(Søg, LookIn:=xlValues)
    If Not s Is Nothing Then
        firstAddress = s.Address
        Do
 
                      Set s = .FindNext(s)
         
            If Left(s.Address, 2) = "$D" Then
                With Sheets("Resultat").Range("A65536").End(xlUp)
                .Offset(1, 1) = s.Value
                .Offset(1, 0) = s.Offset(0, -3).Value
                .Offset(1, 2) = s.Offset(0, 1).Value
                .Offset(1, 3) = s.Offset(0, 2).Value
                .Offset(1, 4) = s.Offset(0, 3).Value
                .Offset(1, 5) = s.Offset(0, 4).Value
                .Offset(1, 6) = s.Offset(0, 5).Value
                .Offset(1, 7) = s.Offset(0, 6).Value
                End With
           
            ElseIf Left(s.Address, 2) = "$E" Then
                With Sheets("Resultat").Range("A65536").End(xlUp)
                .Offset(1, 2) = s.Value
                .Offset(1, 1) = s.Offset(0, -1).Value
                .Offset(1, 0) = s.Offset(0, -4).Value
                .Offset(1, 3) = s.Offset(0, 1).Value
                .Offset(1, 4) = s.Offset(0, 2).Value
                .Offset(1, 5) = s.Offset(0, 3).Value
                .Offset(1, 6) = s.Offset(0, 4).Value
                .Offset(1, 7) = s.Offset(0, 5).Value
                End With
                 
            End If
       
         
          Loop While Not s Is Nothing And s.Address <> firstAddress
       
        A = Sheets("Resultat").Range("A65536").End(xlUp).Row 'NY
        Data = Sheets("Resultat").Range("A2:H" & A)          'NY
        Unload FrmIndsætData
        UserForm1.ListBox1.List() = Data                    'NY
       
        Else:
        MsgBox ("Ikke fundet")
        FrmIndsætData.Show
        Exit Sub
       
        End If
End With
Unload FrmIndsætData
UserForm1.Show ' NY

Exit Sub
Else
MsgBox ("Søgetekst skal indtastes")
FrmIndsætData.Show
End If

End Sub
Avatar billede bak Forsker
17. januar 2004 - 11:27 #41
Private Sub UserForm_Initialize()
Dim listen As Variant
listen = [A1:H18]
On Error Resume Next
For x = LBound(listen, 1) To UBound(listen, 1)
    listen(x, 1) = CStr(listen(x, 1))
Next
ListBox1.ColumnCount = 8
ListBox1.ColumnWidths = "90,80,90,100,1,1,1,1"
ListBox1.List = listen
End Sub
Avatar billede steensommer Praktikant
17. januar 2004 - 11:29 #42
Jeg har disabled ColumnWidths idet det gav lidt forshellig resultat afhængig af hvilken Excel man anvender
Avatar billede bak Forsker
17. januar 2004 - 11:37 #43
Er det "Data" til indsættelse i UserForm1 ?
så indsæt dette mellem

Unload FrmIndsætData  '*****

For x = LBound(Data, 1) To UBound(Data, 1)
    Data(x, 1) = CStr(Data(x, 1))
Next

UserForm1.ListBox1.List() = Data                    'NY ****


For x = LBound(Data, 1) To UBound(Data, 1)
    Data(x, 1) = CStr(Data(x, 1))
Next
Avatar billede steensommer Praktikant
17. januar 2004 - 11:38 #44
Yes!
Avatar billede steensommer Praktikant
17. januar 2004 - 11:41 #45
Skal der stå noget i Userform_Initialize?
Avatar billede bak Forsker
17. januar 2004 - 11:46 #46
Det behøver der egentlig ikke
Avatar billede steensommer Praktikant
17. januar 2004 - 11:49 #47
Det fungerer bare fantastisk. Nu ved jeg godt at det er for omfattende at fortælle mig hvad du gør - endsige at få mig til at forstå det (2 stk bible fra Amazone er købt men endnu ikke ankommet) - men kort hvad gør du?
Avatar billede bak Forsker
17. januar 2004 - 12:01 #48
Hvad har du købt ?


'for alle i 1. "kolonne" af Data-arrayet. lbound=laveste
For x = LBound(Data, 1) To UBound(Data, 1)
    'Her konverter vi bare en dato til en streng
    Data(x, 1) = CStr(Data(x, 1))
Next
Avatar billede steensommer Praktikant
17. januar 2004 - 12:05 #49
1        Microsoft Excel 2002 Bible (Bi 34.94 GBP  1      34.94 GBP
        Sold by Amazon International Sales, Inc.

1        Excel 2002 Formulas            26.24 GBP  1      26.24 GBP
        Sold by Amazon International Sales, Inc.

Jeg var MEGET i tvivl!!
Avatar billede steensommer Praktikant
17. januar 2004 - 12:07 #50
God forklaring - og igen tusinde tak for hjælpen. Hvem ved - en dag bliver jeg måske selvhjulpen :0)
Avatar billede bak Forsker
17. januar 2004 - 12:12 #51
Det er der nok ingen tvivl om, så meget som du arbejder med det :-)
Jeg forstår godt du var i tvivl. Forskellen er stort set ens.......
Avatar billede steensommer Praktikant
17. januar 2004 - 12:14 #52
I øvrigt beklager jeg at jeg har fået SÅ meget for de sølle 30 point - det er egentlig ikke helt korrekt.
Avatar billede bak Forsker
17. januar 2004 - 12:19 #53
Det er ok, du har jo ikke så mange point at gøre med mere og du har betalt rigeligt :-)
Avatar billede bak Forsker
17. januar 2004 - 12:24 #54
PS.. Du kan jo have installeret både excel-XP og xl97 på samme maskine.
Det vil gøre det noget nemmere at lave dit program.
I øjeblikke har jeg både xl2000 og XP på.
Avatar billede steensommer Praktikant
17. januar 2004 - 12:29 #55
Kan man det? Jeg har installeret XL97 på en ældre maskine der står på kontoret men det andet ville da være smart - og der er ingen konfligter?
Vil det sige at man i princippet kan have alle 3 varianter insattelret uden at skulle lave separat boot?
Avatar billede steensommer Praktikant
17. januar 2004 - 12:30 #56
insattelret = Finsk for installeret ;0)
Avatar billede bak Forsker
17. januar 2004 - 12:34 #57
Ja, det skulle der i princippet ikke være noget til hinder for.
Jeg kan endda have begge versioner kørende samtidig.
Avatar billede bak Forsker
17. januar 2004 - 12:35 #58
Jeg vil lige teste om jeg også kan smide xl97 på en gang i dag.
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