Hvordan opretter jeg en dropdownboxhvor jeg enten kan 1. tilføje flere data løbende eller (hvis det ikke kan lade sig gøre) 2. hente data fra et andet ark i samme dokument (hvor jeg også her tilføjer data løbende)?
Vi slår lige 1 og 2 sammen. Lav et ark, hvor du vil have dine data. Indtast dem, f.eks. i kolonne A. Navngiv hele kolonne A.
Når du laver din dropdown, kan du - i stedet for at angive et "alm." celleområde - angive navnet. Nu kan du fuldstændig frit regere rundt i kolonne A i dit dataark (tilføje, fjerne, redigere). Din dropdown afspejler så data i det navngivne område.
Ind med data i kolonne A i et ark, som du vælger/opretter. Markér hele kolonnen. Klik i "navneområdet" (der hvor der normalt står A1, B2 osv. alt efter hvilken celle, du står i) og skriv det navn, som du ønsker at genkende dine data på (jeg kalder dem for eksemplets skyld Test - hvis du kalder det noget andet, skal du lige huske at skrive det, når du laver refereringen i datavalideringen).
Stil markøren i den celle, hvor du vil have din dropdown. Vælg Data - Validering - Liste. Ud for celleområde (har ikke lige adgang til en dansk version af Excel og kan ikke huske, hvad det hedder, men du finder det nok; der er jo ikke så meget at vælge imellem) skriver du =Test
word-hajen> hvad nu hvis området der er navngivet indeholder 5 celler og så der kommer et navn i den 6. celle. Hvordan får man via en makro inkluderet den 6. celle til området?
En dropdrown på en formular og en dropdown i en celle er ikke det samme. Brug AddItem for hver celle i dit range, indtil der er en tom celle (duer selvfølgelig kun, hvis der ikke er blanke celler imellem).
Private Sub tbSelskab_Change() 'Når et selskab vælges vises selskabets stationer i Sted
If tbSelskab = "Statoil" Then With tbSted .RowSource = "Statoil" .ListIndex = 0 End With End If
If tbSelskab = "HydroTexaco" Then With tbSted .RowSource = "HydroTexaco" .ListIndex = 0 End With End If
If tbSelskab = "Uno-X" Then With tbSted .RowSource = "UnoX" .ListIndex = 0 End With End If
If tbSelskab = "1-2-3" Then With tbSted .RowSource = "StatoilBillig" .ListIndex = 0 End With End If
If tbSelskab = "Shell" Then With tbSted .RowSource = "Shell" .ListIndex = 0 End With End If
If tbSelskab = "Q8" Then With tbSted .RowSource = "QOtte" .ListIndex = 0 End With End If End Sub
Der sker det at når jeg vælger et bestemt selskab, får jeg mulighed for at vælge nogle steder (adresser) i en anden dropdown (tbSted). Dvs. at tbSted er lidt dynamisk, og der står forskellige antal steder i den. Jeg vil gerne have at der ikke er mange blanke felter i den!
Der skal overhovedet ikke være blanke felter, så der er jeg helt med dig.
Jeg var nu ikke ude efter at vide, hvad der sker, når du vælger i din dropdown, men efter den kode hvor du tilføjer f.eks. Statoil og Q8 til din dropdown.
Private Sub UserForm_Activate() 'Når ufNy_tankning åbnes hentes Selskaber ind i Selskabs-dropdown With tbSelskab .RowSource = "Selskab" .ListIndex = 0 End With End Sub
Men selskaberne er konstante. Selskaberne hentes ind når formularen aktiveres!
Du kan bruge denne procedure i stedet. Der indlæser du data fra området, indtil der er en blank celle. Det kræver selvfølgelig, at du ikke har nogle blanke celler imellem dine data (hvis du har, er du nødt til at fjerne tjekket på, om cellen er blank, men så bliver hele området løbet igennem, og det er rimelig mange celler).
******************* Private Sub UserForm_Activate() Dim objRange As Range Dim lngItem As Long
Set objRange = ActiveWorkbook.Names("Selskab").RefersToRange
For lngItem = 1 To objRange.Rows.Count If objRange(lngItem) <> "" Then tbSelskab.AddItem (objRange(lngItem)) Else Exit For End If Next lngItem
tbSelskab.ListIndex = 0
Set objRange = Nothing End Sub ************************
Okay - Jeg har 2 dropdown - tbSelskab og tbSted - tbSelskab er den samme hver gang, så der har jeg ikke problemer. tbSted er afhængig af hvad der vælges i tbSelskab - Hvis Statoil vælges i tbSelskab kan der i tbSted vælges de navne, der står i det område, der er defineret som Statoil - Se mit indlæg den 22/06-2007 21:20:22. I Statoils tilfælde er det defineret som Beregninger!$Y$2:$Y$21. I øjeblikket står der kun noget i Y2:Y8. Men da jeg har defineret området til og med Y21 er der mange blanke - og det er dem jeg vil slippe for.
Du kan bruge ovenstående procedure, men undlade at gå ud af løkken, når der er en tom celle (dvs. slet linjerne med Else og Exit For). Du skal selvfølgelig rette dit range (objRange) og referencen til din kontrol.
I øvrigt - læste lige dit indlæg igen (og tidligere indlæg). Du har da allerede navngivet områderne med stederne, ikk'? Sådan ser det i hvertfald ud længere oppe. Når jeg så kombinerer det med dine seneste 2 indlæg, ser det ud til, at du IKKE har tomme celler mellem stederne for hvert selskab. Hvis det er rigtigt, behøver du jo ikke slette linje Else og Exit for. Så er den procedure, som jeg har lavet 23/6 12:43.45 korrekt.
Men måske er problemet, at du ikke lige ved, hvordan du får defineret området - er det rigtigt?
Alle selskaber i én kolonne - i kolonnen ved siden af skriver du navnet på det navngivne område, som indeholder stederne for det selskab. Navngiv begge kolonne som "Selskab". Lav din combobox i formularen om til at kunne indeholde 2 columns. Set BoundColumn til kolonne 2 og skjul 2. kolonne.
Nu kan du bruge værdien fra din combobox direkte i Change_Eventet:
Private Sub tbSelskab_Change() Dim objRange As Range Dim lngItem As Long
If tbSelskab.Listindex <> -1 then Set objRange = ActiveWorkbook.Names(tbSelskab).RefersToRange
For lngItem = 1 To objRange.Rows.Count If objRange(lngItem) <> "" Then tbSted.AddItem (objRange(lngItem)) Else Exit For End If Next lngItem tbSelskab.ListIndex = 0 End If
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.