Avatar billede lasseo Nybegynder
02. december 2004 - 09:06 Der er 8 kommentarer og
1 løsning

Listeopslag - flere valg ønskes muligt

Jeg er ved at lave lille prototype af leverandørdatabase i Excel.

I nogle felter har jeg valgt at bruge liste formatteringen, hvor man vælger fra liste. Nu kunne jeg så godt tænke mig, at det var muligt at foretage mere end ét valg samtidig. Altså f.eks. 3 varegrupper tilknyttet samme leverandør. Her tillader listeopslag kun ét valg.
Jeg forestiller mig at cellerne så skal fomatteres med justering, så den enkelte celle blot udvides til at vise alle de valgte poster, men hvordan?
Avatar billede fobian Nybegynder
02. december 2004 - 15:11 #1
Hvis du sætter egenskaben Multiselect til at være 1-fmMultiSelectMulti på din listbox, så kan du foretage mere end ét valg.
Med denne her macro kan du læse hvilke der er valgt og skrive dem til celle A1 i dit ark og tilpasse kolonnen i bredden:
Private Sub LæsListbox()
    Dim i As Integer
    Dim Valg As String
    For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) Then
        Valg = Valg & " " & ListBox1.List(i)
    End If
    Next
    Range("A1").Value = LTrim(Valg)
    Columns("A:A").Select
    Columns("A:A").EntireColumn.AutoFit
End Sub
Avatar billede lasseo Nybegynder
06. december 2004 - 16:21 #2
> fobian. Mit spørgsmål er vist ikke helt præcist. Måske fordi jeg ikke har arbejdet med området før.
Den liste jeg har valgt er valgt via datavalidering og ikke et kontrolelement, der er oprettet. Måske kontrolelementet ville kunne løse opgaven, men jeg var lige så tilfreds med at datavalideringen. Hvordan får jeg kontrolelementet til at slå op i specifikt dataområde?
Avatar billede fobian Nybegynder
07. december 2004 - 09:36 #3
Hvis du laver en listbox som kontrolelement kan du få den til at slå værdier op i et område i dit regneark ved at sætte egenskaben "ListFillRange" til f.eks at være "Ark1!A2:A100". Så vil de værdier i område A2 til A100 blive vist i din listbox.
Avatar billede lasseo Nybegynder
07. december 2004 - 11:31 #4
Det begynder at tage form.
Kan du også fortælle hvordan jeg får linieskift ind i stedet for mellemrum.
Linieskift indenfor boksen vil normalt være Alt+Enter
Avatar billede fobian Nybegynder
07. december 2004 - 12:20 #5
Jeg mener ikke, at du kan dele én celles indhold over flere linier i en listbox ligesom du gør i Excel med Alt+Enter. Du kan styre det ved at gøre listboxen bredere eller ved at bruge scroll-baren nederst i boxen.
Avatar billede lasseo Nybegynder
07. december 2004 - 12:39 #6
Det er OK at jeg ikke kan styre i listboxen, men via din macro ovenfor kan jeg i f.eks. celle A1 skrive valget til celle. I din macro adskiller du værdierne med blank celle
Valg = Valg & " " & ListBox1.List(i)
Det er i stedet for den blanke celle jeg gerne ville have et linieskifte inde i cellen som ved Alt+Enter. Er det muligt?
Avatar billede lasseo Nybegynder
07. december 2004 - 12:40 #7
Jeg accepterer lige dit svar, for vi er vist godt og vel ude i tillægsspørgsmålene og points er rigeligt fortjente... TAK!
Avatar billede fobian Nybegynder
07. december 2004 - 13:35 #8
Tak for points :o)
Nu er jeg med på, hvad du spurgte om før :o)

Hvis du vil have delt det over flere linier bruger man VBLF i stedet for " ". Så koden kommer til at se sådan ud:
Private Sub LæsListbox()
    Dim i As Integer
    Dim Valg As String
    For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) Then
        If Valg <> "" Then
            Valg = Valg & vbLf & ListBox1.List(i)
        Else
            Valg = ListBox1.List(i)
        End If
    End If
    Next
    Range("A1").Value = Valg
    Columns("A:A").Select
    Columns("A:A").EntireColumn.AutoFit
    Range("A1").Select
End Sub

Du kan også godt få den til at skrive resultatet over flere celler, så er koden i stedet:

Private Sub LæsListbox()
    Dim i As Integer
    Dim Valg As String
    Dim Antal As Integer
    Antal = 1
    For i = 0 To ListBox1.ListCount - 1
      If ListBox1.Selected(i) Then
            Range("A" & Antal).Value = ListBox1.List(i)
            Antal = Antal + 1
      End If
    Next
    Columns("A:A").Select
    Columns("A:A").EntireColumn.AutoFit
    Range("A1").Select
End Sub
Avatar billede lasseo Nybegynder
07. december 2004 - 16:15 #9
Det virker efter hensigten

Tak for hjælpen!
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