Lista despregable con selección múltiple

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

  1. selecciona as celas C2:C5
  2. ficha ou menú Data escolle un equipo Validación de datos
  3. 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

Deixe unha resposta