多选组合框,选择之间用逗号分隔 - 确保末尾没有逗号

问题描述 投票:0回答:1

我使用下面的 VBA 代码在组合框 (lstHomeroom) 多项选择之间添加逗号分隔。但是,我的代码在列表末尾给了我一个逗号。如何修改我的代码以删除末尾的逗号?

例如: 不想要:选择 1、选择 2、选择 3、 想要:选择1,选择2,选择3

Dim x As Long
Dim y As Long
Dim Homeroomselected As String

For y = 2 To x

        'Update Homeroom
        For Z = 0 To lstHomeroom.ListCount - 1
        
            If lstHomeroom.Selected(Z) = True Then
                Homeroomselected = Homeroomselected & lstHomeroom.List(Z) & ","
            End If
            
            Next Z
            Sheets("Input").Cells(y, 4).Value = Homeroomselected

Next y
excel vba combobox multi-select
1个回答
0
投票

连接未知数量的字符串(包括分隔符(在您的情况下为逗号))是一项常见任务。如果您有一个值数组,您可以使用 VBA 函数

join
来实现此目的,但在您的情况下,这将不起作用,因为您没有数组并且您只想添加选定的项目。

基本上有两种方法可以解决这个问题。

第一个是您当前在代码中所做的操作,始终附加分隔符,完成后删除最后一个分隔符。这是@Tom 在评论中建议的:

Homeroomselected  = Left(Homeroomselected, Len(Homeroomselected) - 1)

这有一个小问题:当未选择任何内容时,您将收到运行时错误,因为字符串的 Len 为 0,并且 -1 不是

Left
函数的有效参数。可以肯定的是,您需要检查一下:

If Homeroomselected <> "" Then
    Homeroomselected  = Left(Homeroomselected, Len(Homeroomselected) - 1)
End If

并且,如果您将分隔符更改为

", "
,您需要记住现在需要删除 2 个字符。

我也不太喜欢的是该字符串直到最后一刻才无效。您必须确保最后一个字符始终被删除。假设您有一个循环来创建字符串,并决定出于某种原因您有足够的数据并想要退出(例如达到了最大长度或最大元素数量)。您需要确保删除最后一个字符的语句始终被执行,因此您不能简单地发出

Exit Function
语句。

第二种方法是检查我们是否需要逗号。由于我们无法提前知道稍后是否要添加另一个元素,因此反转逻辑:在写入元素之前,检查是否已经有一个元素。如果是,请将逗号添加到现有元素。

If lstHomeroom.Selected(Z) = True Then
    If Homeroomselected <> "" Then
        Homeroomselected = Homeroomselected & ","
    End If
    Homeroomselected = Homeroomselected & lstHomeroom.List(Z)
End If

可以使用

IIf
函数简写:

Homeroomselected = Homeroomselected & IIf(Homeroomselected <> "", ",", "") & lstHomeroom.List(Z)

或者,您可以创建一个小例程:

Sub JoinString(ByRef result As String, element As String, Optional Separator As String = ",")
    result = result & IIf(result <> "", Separator, "") & element
End Sub

并像这样使用它:

If lstHomeroom.Selected(Z) Then
    JoinString Homeroomselected, lstHomeroom.List(Z), ","
End If
© www.soinside.com 2019 - 2024. All rights reserved.