提问人:PaulDee 提问时间:10/18/2023 更新时间:10/18/2023 访问量:36
多选组合框,选择之间有逗号分隔 - 确保末尾没有逗号
Multi-select Combobox with comma separation between selections - making sure no comma at end
问:
我正在使用下面的VBA代码在组合框(lstHomeroom)多选之间放置逗号分隔。但是,我的代码在列表末尾给了我一个逗号。如何修改代码以删除末尾的逗号?
例如:不想要:selection1,selection2,selection3, 想要:selection1,selection2,selection3
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
答:
连接未知数量的字符串(包括分隔符(在本例中为逗号)是一项常见任务。如果您有值数组,则可以使用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
可以使用 -function 简单地编写: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
评论
Join(array, ", ")
评论