首页 > 解决方案 > 多个 ListBox 选择,根据选择动态更新文本

问题描述

我有一个用户窗体,它填充了一个多选列表框(基于隐藏工作表中的逗号分隔单元格)。

如果用户从列表框中选择单个项目,我希望根据他们的选择显示该项目的特定注释。

单行

如果他们选择 MULTIPLE,我希望注释将他们刚刚选择的项目的注释添加到现有的项目中,而不复制最初选择的项目。

当前结果

如果用户取消选择原始项目但保留第二个项目,则现在需要删除不可见的线条。除了重复...

空行

目前我的代码是:

'check for nothing selected
If Driver_Sel = "" Then
    'nothing selected
    lbl_driverID.Caption = ""
End If

If InStr(1, Driver_Sel, "PC-CR") <> 0 Then
    'PCCR format
    lbl_driverID.Visible = True
    lbl_driverID.Caption = lbl_driverID.Caption & vbNewLine & "-PC-CR: use Format: PCCR-0000xxxx/001"
ElseIf Not InStr(1, Driver_Sel, "PC-CR") <> 0 Then
    'remove PCCR
    lbl_driverID.Visible = True
    lbl_driverID.Caption = Replace(lbl_driverID.Caption, "-PC-CR: use Format: PCCR-0000xxxx/001", "")
End If

If InStr(1, Driver_Sel, "PRTS") <> 0 Then
    'PRTS
    lbl_driverID.Visible = True
    lbl_driverID.Caption = lbl_driverID.Caption & vbNewLine & "-PRTS: include a PRTS#"
ElseIf Not InStr(1, Driver_Sel, "PRTS") <> 0 Then
    'remove PCCR
    lbl_driverID.Visible = True
    lbl_driverID.Caption = Replace(lbl_driverID.Caption, "-PRTS: include a PRTS#", "")
End If

我认为这是因为我有标签的标题(蓝色文本)使用它的现有值,然后添加新项目..即使它是重复的。

我在这里有点难过......关于只显示一个笔记实例的任何帮助?

先感谢您!!

标签: excelvbalistboxuserform

解决方案


lbl_driverID.Caption应该在执行之间重置。否则,它只会在每次列表框选择更改时累积文本。

lbl_driverID.Caption = ""在 If Else 块的开头尝试。

例如:

用户打开一个新的用户表单。用户选择“PC-CR”作为第一个值。lbl_driverID.Caption为空白,脚本为其分配值“-PC-CR:使用格式:PCCR-0000xxxx/001”。

然后用户选择其他东西,但选择仍然包含第一个选择的值“PC-CR”。因此脚本重新将相同的值添加到标题中。这就是双打的来源。

对于不可见的线条:

那是因为您正在vbNewLine为每个新项目添加标题,但您只是删除文本而不是vbNewline. 查看这两行之间的区别:

lbl_driverID.Caption & vbNewLine & "-PC-CR: use Format: PCCR-0000xxxx/001"
Replace(lbl_driverID.Caption, "-PC-CR: use Format: PCCR-0000xxxx/001", "")

请注意,vbNewLine未计算在内。


推荐阅读