多重选择值并在重新选择时保持原始列表的顺序

时间:2020-05-20 11:37:07

标签: excel vba

我将此宏用于单元格下拉选项列表中多个值的选择:

https://www.youtube.com/watch?v=kzjhtEHCRmY

https://docs.google.com/document/d/1JU7G_Tna2zPBtcG2TlarxKCTbuinNsg5LwBqzmuJYK8/edit

宏:

Apple
Banana
Strawberry

但是,当重新选择下拉列表中另一个选定值上方的值时,重新选定的值将附加在另一个值后面。例如:

下拉列表为:

1. Apple, 2. Banana and 3. Strawberry 

当我选择时:

Apple, Banana, Strawberry 

我得到的结果是

Apple, Strawberry 

如果我然后“取消选择”香蕉,我会得到...

Apple, Strawberry, Banana

...然后再“重新选择”香蕉,我得到...

Apple, Banana, Strawberry 

但是...我想要...

{{1}}

...因此应使用原始列表的顺序。

我需要如何调整宏才能执行此操作?

1 个答案:

答案 0 :(得分:1)

添加以下过程

Public Sub AddReordered(ByRef Target As Range, ByVal NewValue As String)
    Dim Output As String

    If Target.Validation.Type = 3 Then
        Dim TestString As String
        TestString = ", " & NewValue & ", "

        Dim Item As Variant
        For Each Item In Range(Target.Validation.Formula1).Value
            If InStr(1, TestString, ", " & Item & ", ") > 0 Then
                Output = IIf(Output <> vbNullString, Output & ", ", "") & Item
            End If
        Next Item
    End If

    Target.Value = Output
End Sub

并替换您的代码

Target.Value = strVal & newVal

AddReordered Target, strVal & newVal

enter image description here 图像1:单元格始终使用与ComboBox中相同的顺序。