Indholdsfortegnelse
Afhængigt af omstændighederne kan du have brug for at vælge flere værdier i en drop-down liste. I denne vejledning viser vi dig, hvordan du foretager flere valg i en drop-down liste. I denne session bruger vi Excel 2019, men du er velkommen til at bruge din foretrukne version.
Før vi går i gang med sessionen, skal vi først lære det datasæt at kende, som er grundlaget for vores eksempler.
Her har vi flere elementer til papirvarer, og ved hjælp af disse vil vi oprette en drop-down-liste og vælge flere elementer der.
Bemærk, at der er tale om et simpelt datasæt for at holde tingene overskuelige. I et praktisk scenarie kan du støde på et meget større og komplekst datasæt.
Arbejdsbog til øvelser
Du er velkommen til at downloade arbejdsbogen fra nedenstående link.
Foretag flere valg fra drop-down-liste.xlsm
Flere valg i en drop-down liste
Først og fremmest skal vi oprette en drop-down liste på baggrund af vores stationeries. Lad os oprette den hurtigt. Tøv ikke med at besøge artiklen om at lave en drop-down liste.
I den Validering af data dialogboksen vælger du den LISTE datatype, og indsæt elementernes celleområde.
B4:B11 er det område, der indeholder de stationære elementer. Nu finder du rullelisten.
Læs mere: Excel drop-down liste afhængigt af valg
1. Vælg flere elementer (muliggør dobbeltvalg)
En konventionel rulleliste vælger altid et enkelt emne. Her kan du se, at vi har valgt Pen fra listen (billedet nedenfor).
Hvis vi nu vælger et andet element, lad os sige Blyant
erstatter den den tidligere værdi. Kun Blyant vil forblive valgt.
Hvis vi vil vælge flere elementer, skal vi bruge VBA kode. Åbn den Microsoft Visual Basic for Applications vindue (tryk på ALT + F11 for at åbne den).
Dobbeltklik nu på regnearkets navn eller nummer, hvor du ønsker at vælge flere elementer i rullelisten. Du vil finde kodevinduet for det pågældende ark.
Her er kodevinduet for Ark2 i vores arbejdsbog (vi har rullelisten i dette ark).
Når kodevinduet er åbnet, skal du indsætte følgende kode der
Private Sub Worksheet_Change(ByVal Target As Range) Dim Oldvalue As String Dim Newvalue As String On Error GoTo Exitsub If Target.Address = "$D$4" Then If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then GoTo Exitsub Else: If Target.Value = "" Then GoTo Exitsub Else Application.EnableEvents = False Newvalue = Target.Value Application.UndoOldvalue = Target.Value If Oldvalue = "" Then Target.Value = Newvalue Else Target.Value = Oldvalue & ", ", " & Newvalue End If End If End If End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub
Gem koden, og prøv nu at vælge værdier i rullelisten.
Efter at have valgt Blyant , vi skal vælge et andet emne Notesbog Og som du kan se, fandt vi begge dele (billedet nedenfor).
Denne kode giver os mulighed for at gentage valget. Lad os sige, at hvis vi vælger Blyant igen,
finder vi genstanden igen i valgfeltet.
Kode Forklaring
Vi har erklæret to strenge Oldvalue og Nyværdi .
Du kan se, at vi har lavet drop-down-listen i D4 celle, derfor er vores måladresse D4 Og desuden har vi kontrolleret igen, om cellen anvender datavalidering eller ej ved hjælp af Target.SpecialCells .
Når der er valgt en værdi, har vi slukket for begivenheder ( Application.EnableEvents = False
), så ændringer ikke udløser hændelsen igen. Derefter lagres det valgte emne i Nyværdi .
Efter at vi har annulleret ændringen, har vi sat værdien ind i Oldvalue Kontroller derefter, om den Oldvalue er tom eller ej. Hvis den er tom (dvs. kun én værdi er valgt), returneres Nyværdi Ellers skal du sammenkæde Oldvalue og Nyværdi .
Før afslutningen nulstiller du hændelsen, så vi kan ændre den, hvis det er nødvendigt.
Læs mere: Flere afhængige drop-down-liste Excel VBA
2. Vælg flere elementer fra drop-down-listen (kun unikt valg)
I det tidligere afsnit har vi set flere valg, hvor gentagelse var tilladt. Hvis du ikke ønsker det, skal du følge dette afsnit.
For nemheds skyld har vi brugt et separat ark til denne demonstration. Denne gang er vi på ark3. Skriv følgende kode i kodevinduet for dette ark.
Private Sub Worksheet_Change(ByVal Target As Range) Dim Oldvalue As String Dim Newvalue As String Application.EnableEvents = True On Error GoTo Exitsub If Target.Address = "$D$4" Then If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then GoTo Exitsub Else: If Target.Value = "" Then GoTo Exitsub Else Application.EnableEvents = False Newvalue = Target.ValueApplication.Undo Oldvalue = Target.Value If Oldvalue = "" Then Target.Value = Newvalue Else If InStr(1, Oldvalue, Newvalue) = 0 Then Target.Value = Oldvalue & ", " & Newvalue Else: Target.Value = Oldvalue End If End If End If End If End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub
Er der nogen forskel i forhold til den tidligere kode! Se nærmere efter, så vil du kunne se den lille forskel.
Her har vi brugt en VBA funktion kaldet INSTR . INSTR funktionen returnerer positionen for den første forekomst af en delstreng i en streng. Besøg denne INSTR-artikel for yderligere oplysninger.
Ved at bruge denne logiske operation med InStr(1, Oldvalue, Newvalue) = 0 har vi kontrolleret, om værdierne er fundet eller ej. Hvis den logiske operation returnerer TRUE (ikke fundet tidligere), så kan man vælge elementet og sammenkæde det med den tidligere værdi.
Gem koden, og prøv nu at vælge en vare, der allerede er valgt.
Her har vi allerede valgt Blyant , hvis vi vil vælge den igen, kan vi ikke. Den tillader ikke dobbelte værdier.
Læs mere: Sådan oprettes en drop down-liste fra et andet ark i Excel
3. Vælg emner i ny linje
Indtil videre har vi fundet ud af, at elementerne er adskilt af et komma. I dette afsnit vil vi arrangere de valgte elementer med nye linjer.
For enkelhedens skyld slår vi nogle få celler sammen med den D4 Vælg de celler, du ønsker at flette, og klik på Sammenlægning & Center fra den Tilpasning afsnittet i Hjem fanebladet.
Cellen vil få mere højde.
Lad os nu se på koden til at adskille elementer ved hjælp af newline. Brug følgende kode
Private Sub Worksheet_Change(ByVal Target As Range) Dim Oldvalue As String Dim Newvalue As String Application.EnableEvents = True On Error GoTo Exitsub If Target.Address = "$D$4" Then If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then GoTo Exitsub Else: If Target.Value = "" Then GoTo Exitsub Else Application.EnableEvents = False Newvalue = Target.ValueApplication.Undo Oldvalue = Target.Value If Oldvalue = "" Then Target.Value = Newvalue Else If InStr(1, Oldvalue, Newvalue) = 0 Then Target.Value = Oldvalue & vbNewLine & Newvalue Else: Target.Value = Oldvalue End If End If End If End If End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub
Den eneste forskel i forhold til den foregående kode er, at vi denne gang har brugt vbNewLine i mellem OldValue og NewValue .
vbNewLine giver en ny linje mellem elementerne.
Vælg nu elementerne.
Vi vælger en vare Pen som vises i billedet ovenfor. Vælg nu et andet element.
Du vil se, at de to varer er i forskellige linjer.
Her har vi to værdier, som er på to forskellige linjer. Hvis du vælger en anden værdi, vil den blive tilføjet til en anden linje. Hver værdi vil være på en ny linje.
Bemærk, at hvis du ønsker en anden afgrænser til at adskille elementerne, skal du bruge den inden for dobbelte anførselstegn i stedet for vbNewline .
Konklusion
Det var alt for i dag. Vi har listet flere metoder til at foretage flere valg i en rulleliste. Vi håber, at du vil finde dette nyttigt. Du er velkommen til at kommentere, hvis noget virker svært at forstå. Lad os vide, om der er andre metoder, som vi har overset her.