Aftreklys met multi-kies

Die klassieke aftreklys in 'n Excel-blad is wonderlik, maar dit laat jou net een opsie uit die voorgestelde stel kies. Soms is dit presies wat jy wil hê, maar daar is situasies waar die gebruiker moet kan kies sommige elemente uit die lys.

Kom ons kyk na verskeie tipiese implementerings van so 'n multi-keuse lys.

Opsie 1. Horisontaal

Die gebruiker kies items uit die aftreklys een vir een, en hulle verskyn regs van die sel wat verander word, en word outomaties horisontaal gelys:

Aftreklyste in selle C2:C5 in hierdie voorbeeld word op 'n standaard manier geskep, dws

  1. kies selle C2:C5
  2. oortjie of spyskaart data kies 'n span Datavalidasie
  3. in die venster wat oopmaak, kies 'n opsie lys en spesifiseer as 'n reeks Bron selle met brondata vir lys A1:A8

Dan moet jy 'n makro by die bladmodule voeg, wat al die hoofwerk sal doen, dws geselekteerde waardes aan die regterkant van die groen selle byvoeg. Om dit te doen, regskliek op die bladoortjie met aftreklyste en kies die opdrag Bronkode. Plak die volgende kode in die Visual Basic-redigeerdervenster wat oopmaak:

Private Sub Worksheet_Change(ByVal Target As Range) Op Fout Hervat Volgende Indien Nie Sny(Target, Range("C2:C5")) Is Niks En Target.Cells.Count = 1 Then Application.EnableEvents = False If Len(Target.Offset) (0, 1)) = 0 Dan Target.Offset(0, 1) = Target Else Target.End(xlToRight).Offset(0, 1) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Indien nodig, vervang die sensitiewe reeks van die aftreklyste C2:C5 in die tweede reël van hierdie kode met jou eie.

Opsie 2. Vertikaal

Dieselfde as in die vorige weergawe, maar die nuwe geselekteerde waardes word nie regs bygevoeg nie, maar aan die onderkant:

Dit word op presies dieselfde manier gedoen, maar die hanteerder-makrokode verander effens:

Private Sub Worksheet_Change(ByVal Target As Range) Op Fout Hervat Volgende Indien Nie Sny(Target, Range("C2:F2")) Is Niks En Target.Cells.Count = 1 Then Application.EnableEvents = False If Len(Target.Offset) (1, 0)) = 0 Dan Target.Offset(1, 0) = Target Else Target.End(xlDown).Offset(1, 0) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Weereens, indien nodig, vervang die sensitiewe reeks van die C2:F2-aftreklyste met jou eie in die tweede reël van hierdie kode.

Opsie 3. Met akkumulasie in dieselfde sel

In hierdie opsie vind die akkumulasie plaas in dieselfde sel waar die aftreklys geleë is. Die geselekteerde elemente word geskei deur enige gegewe karakter (byvoorbeeld, 'n komma):

Aftreklyste in groen selle word op 'n heeltemal standaard manier geskep, soos in die vorige metodes. Al die werk word weer gedoen deur 'n makro in die bladmodule:

Private Sub Worksheet_Change(ByVal Target As Range) By Fout Hervat Volgende Indien Nie Sny(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 And oldval <> newVal Then Target = Target & "," & newVal Else Target = newVal End If If Len(newVal) = 0 Then Target.ClearContents Application.EnableEvents = True End If Einde Sub  

As jy wil, kan jy die skeidingskarakter (komma) in die 9de reël kode vervang met jou eie (byvoorbeeld 'n spasie of 'n kommapunt).

  • Hoe om 'n eenvoudige aftreklys in 'n Excel-bladsel te skep
  • Aftreklys met inhoud
  • Aftreklys met ontbrekende opsies bygevoeg
  • Wat is makro's, hoe om dit te gebruik, waar om makro-kode in Visual Basic in te voeg

Lewer Kommentaar