Rulleliste med multi-select

Den klassiske rulleliste i et Excel-ark er fantastisk, men den giver dig kun mulighed for at vælge én mulighed fra det præsenterede sæt. Nogle gange er det præcis det, du ønsker, men der er situationer, hvor brugeren skal kunne vælge nogle elementer fra listen.

Lad os se på flere typiske implementeringer af sådan en multi-select-liste.

Mulighed 1. Vandret

Brugeren vælger elementer fra rullelisten én efter én, og de vises til højre for cellen, der ændres, og vises automatisk vandret:

Rullelister i cellerne C2:C5 i dette eksempel oprettes på en standard måde, dvs

  1. vælg cellerne C2:C5
  2. fane eller menu data vælge et hold Datavalidering
  3. i det vindue, der åbnes, skal du vælge en mulighed Liste og angiv som et interval Kilde celler med kildedata til liste A1:A8

Derefter skal du tilføje en makro til arkmodulet, som vil udføre alt hovedarbejdet, dvs. tilføje udvalgte værdier til højre for de grønne celler. For at gøre dette skal du højreklikke på arkfanen med rullelister og vælge kommandoen Kildekode. Indsæt følgende kode i Visual Basic-editorvinduet, der åbnes:

Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:C5")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False If Len(Target.Offset) (0, 1)) = 0 Så Target.Offset(0, 1) = Target Else Target.End(xlToRight).Offset(0, 1) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Erstat om nødvendigt det følsomme område i rullelisterne C2:C5 i anden linje i denne kode med din egen.

Mulighed 2. Lodret

Det samme som i den tidligere version, men de nye valgte værdier tilføjes ikke til højre, men til bunden:

Det gøres på nøjagtig samme måde, men handlermakrokoden ændres lidt:

Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:F2")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False If Len(Target.Offset) (1, 0)) = 0 Så Target.Offset(1, 0) = Target Else Target.End(xlDown).Offset(1, 0) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Igen, hvis det er nødvendigt, udskift det følsomme område af C2:F2-rullelisten med din egen i anden linje i denne kode.

Mulighed 3. Med ophobning i samme celle

I denne mulighed sker akkumuleringen i den samme celle, hvor rullelisten er placeret. De valgte elementer er adskilt af et givet tegn (f.eks. et komma):

Rullelister i grønne celler oprettes på en helt standard måde, som i de tidligere metoder. Alt arbejdet udføres igen af ​​en makro i arkmodulet:

Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:C5")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False newVal = Target Application.Undo oldval = Target If Len(oldval) <> 0 Og oldval <> newVal Then Target = Target & "," & newVal Else Target = newVal End If If Len(newVal) = 0 Then Target.ClearContents Application.EnableEvents = True End If Slut Sub  

Hvis det ønskes, kan du erstatte skilletegnet (komma) i 9. kodelinje med dit eget (for eksempel et mellemrum eller et semikolon).

  • Sådan opretter du en simpel rulleliste i en celle i et Excel-ark
  • Dropdown liste med indhold
  • Rulleliste med manglende muligheder tilføjet
  • Hvad er makroer, hvordan man bruger dem, hvor skal man indsætte makrokode i Visual Basic

Giv en kommentar