A clásica lista despregable nunha folla de Excel é xenial, pero só permite seleccionar unha opción do conxunto presentado. Ás veces, isto é exactamente o que queres, pero hai situacións nas que o usuario debe poder escoller algúns elementos da lista.
Vexamos varias implementacións típicas desta lista de selección múltiple.
Opción 1. Horizontal
O usuario selecciona os elementos da lista despregable un por un e aparecen á dereita da cela que se está modificando, listando automaticamente horizontalmente:
As listas despregábeis nas celas C2:C5 deste exemplo créanse dun xeito estándar, é dicir
- selecciona as celas C2:C5
- ficha ou menú Data escolle un equipo Validación de datos
- na xanela que se abre, seleccione unha opción lista e especifique como intervalo fonte celas con datos fonte para a lista A1:A8
A continuación, cómpre engadir unha macro ao módulo da folla, que fará todo o traballo principal, é dicir, engadir os valores seleccionados á dereita das celas verdes. Para iso, fai clic co botón dereito na pestana da folla con listas despregábeis e selecciona o comando Código fonte. Pega o seguinte código na xanela do editor de Visual Basic que se abre:
Private Sub Worksheet_Change(ByVal Target As Range) On error Continue Next If Not Intersect(Target, Range("C2:C5")) Non é nada e Target.Cells.Count = 1 Entón Application.EnableEvents = False If Len(Target.Offset (0, 1)) = 0 Entón Target.Offset(0, 1) = Target Else Target.End(xlToRight).Offset(0, 1) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub
Se é necesario, substitúe o rango sensible das listas despregábeis C2:C5 na segunda liña deste código polo seu propio.
Opción 2. Vertical
O mesmo que na versión anterior, pero os novos valores seleccionados non se engaden á dereita, senón á parte inferior:
Faise exactamente do mesmo xeito, pero o código da macro do manejador cambia lixeiramente:
Private Sub Worksheet_Change(ByVal Target As Range) On error Continue Next If Not Intersect(Target, Range("C2:F2")) Non é nada e Target.Cells.Count = 1 Entón Application.EnableEvents = False If Len(Target.Offset (1, 0)) = 0 Entón Target.Offset(1, 0) = Target Else Target.End(xlDown).Offset(1, 0) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub
De novo, se é necesario, substitúe o rango sensible das listas despregábeis C2:F2 polo seu propio na segunda liña deste código.
Opción 3. Con acumulación na mesma cela
Nesta opción, a acumulación prodúcese na mesma cela onde se atopa a lista despregable. Os elementos seleccionados están separados por calquera carácter (por exemplo, unha coma):
As listas despregábeis en celas verdes créanse dun xeito completamente estándar, como nos métodos anteriores. Todo o traballo faise, de novo, por unha macro no módulo da folla:
Private Sub Worksheet_Change(ByVal Target As Range) On error Continue 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(newVal) <> 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 Final Sub
Se o desexa, pode substituír o carácter separador (coma) na novena liña de código polo seu propio (por exemplo, un espazo ou un punto e coma).
- Como crear unha lista despregable sinxela nunha cela de folla de Excel
- Lista despregable con contido
- Lista despregable coas opcións que faltan engadidas
- Que son as macros, como usalas, onde inserir o código de macros en Visual Basic