07. juli 2010 - 14:14Der er
21 kommentarer og 1 løsning
Slå post op i Userform
Hej eksperter,
Jeg har nogle rækker og kolonner med data, hvor hver række har en ID kolonne med et unikt tal. Jeg vil gerne vise en Userform, hvor brugeren kan indtaste ID i en tekstboks, og så få vist data for netop den post i tekst- og combobokse. Man skal så også kunne gemme ændringer, men det tror jeg godt at jeg kan finde ud af. Det er opslaget jeg ikke kan komme videre med :(. Håber at nogen kan hjælpe.
Jeg vil gerne bruge en userform fordi jeg har brug for at styre brugerne. Det er nok den mest udbredte anvendelse for det værktøj, tænker jeg :). Det er for at gøre det let for dem og undgå fejl.
Jeg er kommet et stykke vej i dag selv, faktisk, så lige nu mangler jeg kun at finde cellereferencen for et unikt tal fra kolonne a, der vises i en combobox! Hvis du kan finde en løsning på det, så er det nemme point, tror jeg...
Brugeren vælger fra eksisterende poster (ID) i en combobox, og så vises værdierne for denne post i formularen. Nu skal der så bare laves en Gem-funktion, så rettelser føres ind på den rigtige post i den rigtige række. Jeg har fået styr på NY post.
Her er min kode (ved ikke om den hjælper...):
Private Sub CommandButton3_Click() Unload Me End Sub
Private Sub UserForm_Activate() With ComboBox1 .RowSource = "A2:b100" .ListIndex = 0 .ColumnCount = 2 .ColumnWidths = "20,100" End With End Sub
Private Sub ComboBox1_Change()
Set MyRange = Worksheets("Dashboard").Range("A1:J100")
If ComboBox1.Text = Application.WorksheetFunction.Max(Sheets("Dashboard").Range("A2:A1000")) + 1 Then TextBox2.Text = "" Else TextBox2.Text = Application.WorksheetFunction.VLookup(Val(ComboBox1.Text), MyRange, 2, False) End If
Set MyRange = Nothing TextBox2.SetFocus
End Sub
Private Sub cbtilføj_Click() frmret!ComboBox1 = Application.WorksheetFunction.Max(Sheets("Dashboard").Range("A2:A1000")) + 1 End Sub
Private Sub cbgem_Click()
'Find ud af om der tilføjes ny eller om der rettes!
'Tilføj If ComboBox1.Text = Application.WorksheetFunction.Max(Sheets("Dashboard").Range("A2:A1000")) + 1 Then ActiveSheet.Range("A65536").End(xlUp).Select 'MsgBox " den aktive celle er " & ActiveCell.Address
With ActiveCell .Offset(1, 0).Value = ComboBox1.Text .Offset(1, 1).Value = TextBox2.Text End With Else 'Ret: Find ID, Find række, indsætte i rækken
Range("A2").Select Do Until ActiveCell.Value = "" ActiveCell.Offset(1, 0).Select If ActiveCell.Value = ComboBox1.Value Then ActiveCell.Offset(0, 1).Select End If Exit Do Loop
Don't know... koden driller mig. Jeg skal bare ha en simpel løkke til at virke, så jeg kan finde en værdi i en kolonne, der er magen til den i min combobox... Hvor svært kan det være :(
Tak Nicolai :). Den prøver jeg lige. Hvis du lægger et svar, så får du pointsene!
Har LIGE fået det til at fungere med en kodebid jeg neglede fra en af kabbak's svar:
Public Sub løkke() Dim RW As Long, D As Variant, I As Long, CBV As Long RW = Range("A65536").End(xlUp).Row + 1 ' finder den række der er under den sidste udfyldte celle D = Range("A1:A" & RW) ' læser cellerne ind i variabelen D, det er hurtigere at finde i en variabel en ved at ' tjekke celler, derfor hastigheden.
CBV = frmret!ComboBox1.Value
For I = RW To 2 Step -1 ' læser baglæns, for st finde det sidste U If D(I - 1, 1) = CBV Then ' når U er fundet Range("A" & I).Select ' aktiverer cellen ActiveCell.Offset(-1, 1).Select With ActiveCell .Value = frmret!TextBox2.Text End With Exit For ' hopper ud af løkken End If Next D = Empty ' tømmer variablen End Sub
Den indsætter sjovt nok teksten fra TextBox2 helt nederst med din kode... Og ikke til højre for den rigtige post - men never mind - den anden kode virker :)
Jeg har ikke lige oprettet nogle comboboxes osv, så har ikke kunne teste det derfra - men har prøvet med tal fra en anden celle, hvor det virkede fint.
Når den sammenligner data fra Combobox kan det tænktes det er en string og tallet i cellen regnes sikkert som int.
Hvis det er korrekt, så burde du kunne bruge følgende:
Dim celle As String
Range("A2").Select Do Until ActiveCell.Value = "" ActiveCell.Offset(1, 0).Select celle = ActiveCell.Value If celle = ComboBox1.Value Then Exit Do End If Loop
Sådan har jeg det også :D. Men jeg kan bedst lide, hvis der er lidt værdsættelse af hjælpen - også selv om det blot er symbolske point. Tak for hjælpen - i denne omgang!
Det betyder jo, at jeg blot kan anvende det her i stedet for den D(I-1, 1) kode i den anden tråd som ingen af os forstår :). Jeg opdaterer lige den tråd senere her i weekenden. God weekend og tak for din kanon hjælp her i løbet af ugen. Meget værdsat!
Årh for fa'en, det må du undskylde... :*). Jeg kom lige til at blande to tråde og to hjælpsomme mennesker sammen. Tak og i lige måde!
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.