Word Skrevet 3. august 2013 Del Skrevet 3. august 2013 Hei, har en database med følgende kode: Private Sub ComboBox1_Change() Dim ws As Worksheet Dim LR As Long Dim Cell As Range Dim List As New Collection Dim Item As Variant Set ws = Worksheets("Database") With ws LR = .Cells(.Rows.Count, 1).End(xlUp).Row ComboBox2.Clear For Each Cell In .Range("A2:A" & LR) With Cell If .Text = ComboBox1.Value Then On Error Resume Next List.Add .Offset(0, 1).Text, CStr(.Offset(0, 1).Value) On Error GoTo 0 End If End With Next Cell For Each Item In List ComboBox2.AddItem Item Next Item End With End Sub Private Sub ComboBox2_Change() Dim ws As Worksheet Dim LR As Long Dim Cell As Range Dim List As New Collection Dim Item As Variant Set ws = Worksheets("Database") With ws LR = .Cells(.Rows.Count, 1).End(xlUp).Row ComboBox3.Clear For Each Cell In .Range("A2:A" & LR) With Cell If .Text = ComboBox1.Value Then If .Offset(0, 1).Text = ComboBox2.Value Then On Error Resume Next List.Add .Offset(0, 2).Text, CStr(.Offset(0, 2).Value) On Error GoTo 0 End If End If End With Next Cell For Each Item In List ComboBox3.AddItem Item Next Item End With End Sub Private Sub ComboBox3_Change() Dim ws As Worksheet Dim LR As Long Dim Cell As Range Dim List As New Collection Dim Item As Variant Set ws = Worksheets("Database") With ws LR = .Cells(.Rows.Count, 1).End(xlUp).Row ComboBox4.Clear For Each Cell In .Range("A2:A" & LR) With Cell If .Text = ComboBox1.Value Then If .Offset(0, 2).Text = ComboBox3.Value Then On Error Resume Next List.Add .Offset(0, 3).Text, CStr(.Offset(0, 3).Value) On Error GoTo 0 End If End If End With Next Cell For Each Item In List ComboBox4.AddItem Item Next Item End With End Sub Databasen har form som vist på bildet Database2.jpg. Brukeren henter data ved hjelp av kombobokser som vist på bildet Database.jpg. Spørsmålet er som følger: Hvordan får jeg data fra Description inn i tekstboksen når komboboksen "Equipment name" er valgt? (Se bildet Database3.jpg) Lenke til kommentar
Harald Staff Skrevet 6. august 2013 Del Skrevet 6. august 2013 Textbox1.Text = Worksheets("Database").Cells(Combobox3.listindex + 2, 5).Value Men du har et underlig oppsett, om jeg får være så fri. Er Kolonnene A, B og C uavhengige, mens C og E en til en? Beste hilsen Harald Lenke til kommentar
Word Skrevet 7. august 2013 Forfatter Del Skrevet 7. august 2013 Hei, Kategori A gir input til B som gir input til C. Når C er valgt så gir denne input til både D og E. Brukeren kan selv velge om han vil bruke verdien gitt i D eller om han vil putte inn sin egen verdi her, mens beskrivelsen skal han se uansett når han har valgt C. Jeg prøvde å legge inn koden du gav som vist under, men dette fører til at jeg alltid får verdien i celle E2. uavhengig om hva jeg har gitt som input til combobox3 (altså C): Private Sub ComboBox3_Change() Dim ws As Worksheet Dim LR As Long Dim Cell As Range Dim List As New Collection Dim Item As Variant Set ws = Worksheets("Database") With ws LR = .Cells(.Rows.Count, 1).End(xlUp).Row ComboBox4.Clear For Each Cell In .Range("A2:A" & LR) With Cell If .Text = ComboBox1.Value Then If .Offset(0, 2).Text = ComboBox3.Value Then On Error Resume Next List.Add .Offset(0, 3).Text, CStr(.Offset(0, 3).Value) On Error GoTo 0 End If End If End With Next Cell For Each Item In List ComboBox4.AddItem Item TextBox14.Text = Worksheets("Database").Cells(ComboBox3.ListIndex + 2, 5).Value Next Item End With End Sub Har kanskje satt den inn på feil sted? Lenke til kommentar
Harald Staff Skrevet 7. august 2013 Del Skrevet 7. august 2013 Sorry, da misforsto jeg oppsettet ditt og gav et ubrukelig svar. Den enkleste måten er antakelig å huske radnummeret samtidig med at Combobox4 fylles. Eller kanskje, har C bare unike verdier eller er det ABC-kombinasjonen som skiller enhetene? Lenke til kommentar
Word Skrevet 7. august 2013 Forfatter Del Skrevet 7. august 2013 Er jeg som skal si sorry, er litt dårlig til å forklare Skal prøve igjen: Kategori A (ComboBox1) skal inneholde diverse utstyr som for eksempel motor. Når Motor er valgt skal det i B (ComboBox2) dukke opp forskjellige produsenter av motorer. Når produsenten er valgt skal forskjellige motorer fra produsenten dukke opp i C (ComboBox3). Når C er valgt skal D (ComboBox4) fylles med vekten, samtidig som tekstboksen (TextBox14) fylles med beskrivelsen av motoren. Lenke til kommentar
Harald Staff Skrevet 7. august 2013 Del Skrevet 7. august 2013 Ok, så vet vi hva den skal. Fint. Men er det slik at alle kombinasjoner valg i ABC har sin egen linje, og at den inneholder beskrivelsen som skal hentes fra E? Eller er ABCD uavhengige lister med unike verdier som fritt kan kombineres? Hva henger i så fall beskrivelsen fast i? To spørsmål til: Kan man skrive fritekst i combo'ene eller må man velge mellom faste verdier? Og, har du skrevet koden og-eller forstår den godt, eller er det noen andres verk? Jeg ser for meg et søk etter ABC-kombinasjonen for å hente E, men det er kanskje ikke den beste løsningen. Og, hvis rekkefølgen av valg er så entydig som du sier, tror jeg det er mer brukervennlig å gjøre dette i 3-4 skjermbilder og ikke ett. Enklere å lage også. Skjer valgene i en Userform eller i et regneark? Vet jeg spør mye. Vil bare at det skal bli kulest mulig Beste hilsen Harald Lenke til kommentar
Harald Staff Skrevet 8. august 2013 Del Skrevet 8. august 2013 Hvis jeg gjetter rett er dette den mest konsistente måten å gjøre det på: For Each Item In List ComboBox4.AddItem Item Next Item 'NY: Call HentBeskrivelse End With End Sub Private Sub HentBeskrivelse() Dim ws As Worksheet Dim LR As Long Dim Cell As Range Dim List As New Collection Dim Item As Variant Set ws = Worksheets("Database") With ws LR = .Cells(.Rows.Count, 1).End(xlUp).Row TextBox1.Text = "" For Each Cell In .Range("A2:A" & LR) With Cell If .Text = ComboBox1.Value Then If .Offset(0, 1).Text = ComboBox2.Value Then If .Offset(0, 2).Text = ComboBox3.Value Then TextBox1.Text = .Offset(0, 4).Value Exit Sub End If End If End If End With Next Cell End With End Sub Beste hilsen Harald Lenke til kommentar
Word Skrevet 8. august 2013 Forfatter Del Skrevet 8. august 2013 Hvis jeg gjetter rett er dette den mest konsistente måten å gjøre det på: For Each Item In List ComboBox4.AddItem Item Next Item 'NY: Call HentBeskrivelse End With End Sub Private Sub HentBeskrivelse() Dim ws As Worksheet Dim LR As Long Dim Cell As Range Dim List As New Collection Dim Item As Variant Set ws = Worksheets("Database") With ws LR = .Cells(.Rows.Count, 1).End(xlUp).Row TextBox1.Text = "" For Each Cell In .Range("A2:A" & LR) With Cell If .Text = ComboBox1.Value Then If .Offset(0, 1).Text = ComboBox2.Value Then If .Offset(0, 2).Text = ComboBox3.Value Then TextBox1.Text = .Offset(0, 4).Value Exit Sub End If End If End If End With Next Cell End With End Sub Beste hilsen Harald Helt genialt! Takk!! :) Lenke til kommentar
Harald Staff Skrevet 9. august 2013 Del Skrevet 9. august 2013 Helt genialt får holde :-) Takk for tilbakemelding! Beste hilsen Harald Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå