Avatar billede gladhund Nybegynder
07. juli 2010 - 14:14 Der 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.
Avatar billede Ialocin Novice
07. juli 2010 - 22:11 #1
Hej gladhund

Tak for sidst :o)

Skal lige forstå det ret ...

Hvorfor en userform ? ... kan du ikke bruge en liste på det enkelte worksheet ?


mvh Nicolai
Avatar billede gladhund Nybegynder
07. juli 2010 - 22:29 #2
Hej igen :)!

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


'Unload Me
End Sub
Avatar billede gladhund Nybegynder
07. juli 2010 - 22:37 #3
Noget i den her stil måske :):

Range("A2").Select
Do Until ActiveCell.Value = ""
    If ActiveCell.Value = ComboBox1.Value Then
    ActiveCell.Offset(0, 1).Select
Loop
Avatar billede gladhund Nybegynder
07. juli 2010 - 22:48 #4
Den her virker NÆSTEN

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

With ActiveCell
    .Value = TextBox2.Text
End With
Avatar billede Ialocin Novice
07. juli 2010 - 22:49 #5
Hej gladhund

Hmm, natten nærmer sig ... og hjenecellerne kører ikke i højeste gear!

Kan p.t. ikke lige gennemskue den manglende celle reference, men du klarer dig jo også fantastisk :o)

mvh Nicolai
Avatar billede gladhund Nybegynder
07. juli 2010 - 22:58 #6
Sov godt - jeg lægger mig først når jeg har knækket den :D
Avatar billede newbieatphp Nybegynder
07. juli 2010 - 23:10 #7
Hvad mangler du lige nu for at være færdig?
Avatar billede gladhund Nybegynder
07. juli 2010 - 23:31 #8
Hep,

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 :(
Avatar billede newbieatphp Nybegynder
07. juli 2010 - 23:33 #9
Du har placeret dit Exit Do forkert sted, så den kører kun din do until en gang.

Range("A2").Select
Do Until ActiveCell.Value = ""
    ActiveCell.Offset(1, 0).Select
    If ActiveCell.Value = ComboBox1.Value Then
        Exit Do
    End If
Loop

ActiveCell.Offset(0, 1).Value = TextBox2.Text
Avatar billede gladhund Nybegynder
07. juli 2010 - 23:41 #10
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
Avatar billede gladhund Nybegynder
07. juli 2010 - 23:43 #11
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 :)
Avatar billede newbieatphp Nybegynder
07. juli 2010 - 23:49 #12
Har du prøvet den jeg smed?
Avatar billede gladhund Nybegynder
08. juli 2010 - 00:10 #13
Ja - det er den der indsætter teksten nederst...
Avatar billede newbieatphp Nybegynder
08. juli 2010 - 00:25 #14
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

ActiveCell.Offset(0, 1).Value = TextBox2.Text
Avatar billede gladhund Nybegynder
08. juli 2010 - 00:35 #15
Du har sikkert ret. Jeg orker ikke at rode mere med det nu - jeg er træt! :)

Smid et svar, så får du point - og så roder jeg videre med det i morgen. Det skal nok komme til at fungere - det er milimeter der mangler.
Avatar billede newbieatphp Nybegynder
08. juli 2010 - 00:39 #16
Pointene er ikke så vigtige, jeg er mere interesseret i at det virker :)

anyways, her er et svar..
Avatar billede gladhund Nybegynder
08. juli 2010 - 00:44 #17
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!
Avatar billede newbieatphp Nybegynder
08. juli 2010 - 00:46 #18
:)  .. men når/hvis du tester det, så smid lige om det virker
Avatar billede gladhund Nybegynder
09. juli 2010 - 18:14 #19
Hej Nicolai :)

Det virker... flot.

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!

MVH

Rasmus
Avatar billede newbieatphp Nybegynder
10. juli 2010 - 13:20 #20
a hædder æ nicolai :P
Avatar billede newbieatphp Nybegynder
10. juli 2010 - 13:21 #21
Men dejligt det virker :) - God weekend
Avatar billede gladhund Nybegynder
10. juli 2010 - 19:39 #22
Å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!
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