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

4sup72z8  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(160)

我使用下面的代码在combobox(lstHomeroom)多选之间放置逗号分隔。然而,我的代码在列表的末尾给了我一个逗号。如何修改代码以删除结尾处的逗号?

**例如:**不想要:selection1,selection2,selection3,Want:选择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
n53p2ov0

n53p2ov01#

连接未知数量的字符串是一项常见的任务,包括分隔符(在本例中为逗号)。如果你有一个值数组,你可以使用函数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

相关问题