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