23. oktober 2002 - 20:41Der er
28 kommentarer og 1 løsning
Liste med mulige værdier
Jeg skal have en liste med valgmuligheder i en given celle. Jeg kan bruge datavalidering, men her kan jeg kun angive en kolonne. Jeg har nr. i en kolonne og teksten ved siden af: A1;A2 1;Tekst1 2;Tekst2 3;Tekst3 osv...
Man skal enetn få vist begge dele alternativt teksten, men det er nummeret der skal gemmes i cellen??
Hvad med at lave det ved hjælp af LOPSLAG() På et ark opretter du din tabel med mulige værdier: 1;Tekst1 2;Tekst2 3;Tekst3 osv... ( I eksemplet herunder er disse værdier indtastet på Ark2 i område A1:B100
På Ark1 indtaster du værdien i celle A1. I celle B1 indtaster du formlen =LOPSLAG(A1;Ark2!A1:B100;2) Denne formel vil så gå over på Ark2 og hente den tilhørende tekst.
LOPSLAG(Opslagsværdi;Tabelområde;Kolonne i tabellen)
En combobox eller liste ligger jo nærmest oven på cellen, det skulle gerne være integreret præcis som i datavalidering. Men hvis fx. det er varenumre, vil man jo gerne se navnet på varen, men gemme nummret i cellen. Derfor nytter det vel ikke at lægge værdien i en tredie kolonne så vil man jo gemme værdien "1 tekst1" i cellen eller hva?...
For lige at skære det ud i pap, er det du ønsker: At selve cellen forsynes med små pile, så du ved hjælp af disse kan udpege nr med tilhørende tekst, hvorefter værdi gemmes i cellen.
Ja dog kun én pil. Prøv at lave datavalidering på en celle og se hvordan det ser ud. Problemet med datavalidering er blot at man kun kan angive én kolonne.
Ok jeg kan se problemet. hvis dine varenumre er af samme længde kan det godt gøres på min måde, lidt klodset måske. =A1&B1="1 tekst1" hvis du laver datavalidering en kolonne længere til højre, kan du i kolonnen for sige = højre(d1;1) så får du kun tallet-. men hvis varenummeret er af forskellig længde er det ikke godt.
Jeg tror ikke det kan laves direkte i cellen, der er vist ingen vej uden om lidt VBA-programmering. Men så kommer det jo ikke helt til at virke, som du nævner.
Private Sub ComboBox1_Change() Range("D5").Value = ComboBox1.List(ComboBox1.ListIndex) End Sub
Private Sub ComboBox1_GotFocus() Dim rCell As Range Dim asCells() As String Dim lCount As Long lCount = Range("A1").CurrentRegion.Rows.Count - 1 ReDim asCells(lCount, 1) lCount = 0 With ComboBox1 .Clear .ColumnCount = 2 .ColumnWidths = "20,30" For Each rCell In Range("A1").CurrentRegion.Columns(1).Cells asCells(lCount, 0) = rCell.Value asCells(lCount, 1) = rCell.Offset(0, 1).Value lCount = lCount + 1 Next rCell .List = asCells End With Set rCell = Nothing End Sub
Ja, sådan kan den os laves :-) Det kan være en god ide at ændre på ColumnWidth f.eks. til 20 pt;30 pt
Jeg bruger GotFocus hændelsen til at fylde Comboboxen, således området med "varenumre" kan vokse uden at jeg skal ændre i LIstFillRange. Jeg har lige lavet endnu en lille feature - således der ikke medtages kolonneoverskrifter. Den kan gøres kortere med ListFillRange end jeg havde lavet først.
Private Sub ComboBox1_GotFocus() Dim rRegion As Range Dim lCount As Long
Set rRegion = Range("A1").CurrentRegion ' This line is only used if the region has headings Set rRegion = rRegion.Offset(1, 0).Resize(rRegion.Rows.Count - 1)
With ComboBox1 .Clear .ColumnCount = 2 .ColumnWidths = "20,30" .ListFillRange = rRegion.Address End With End Sub
Jeg gemmer cellen således - samt har jeg opdaget en lille fejlmulighed - så :
Private Sub ComboBox1_Change() Range("D5").Value = ComboBox1.Value End Sub
Private Sub ComboBox1_GotFocus() Dim rRegion As Range Dim lCount As Long
Set rRegion = Range("A1").CurrentRegion ' This line is only used if the region has headings Set rRegion = rRegion.Offset(1, 0).Resize(rRegion.Rows.Count - 1)
With ComboBox1 On Error Resume Next .Clear On Error GoTo 0 .ColumnCount = 2 .ColumnWidths = "20,30" .ListFillRange = rRegion.Address End With End Sub
.Clear kan give fejl i forskellige situationer, hvorfor denne lille error ting. ComboBox1_GotFocus kan dog sættes op på egenskaber, men det gør combobox'en statisk frem for dynamisk - hver ting til sin tid.
Du har helt ret, den ligger ovenpå cellen. Du kan forsøge at tilpasse størrelsen, så den passer med størrelsen på cellen - men den vil altid ligge ovenpå. Som tidligere sagt, det kan ikke laves i en celle.
Hvis du gerne vil have returneret teksten fra kolonne "2" istedet for varenummeret, så kan det gøres således : Private Sub ComboBox1_Change() With ComboBox1 If Not (.ListIndex = 0) Then On Error Resume Next Range("D5").Value = .List(.ListIndex, 1) End If End With End Sub
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.