03. januar 2004 - 13:58Der 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?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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)
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
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
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???
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
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?
--> 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???
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 ?
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.
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
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)
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)
-->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(
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
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
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
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
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?
'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
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å.
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?
Jeg vil lige teste om jeg også kan smide xl97 på en gang i dag.
Synes godt om
Ny brugerNybegynder
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.