【问题标题】:VBA - Not allow duplicates in Multicolumn listboxVBA - 不允许在多列列表框中重复
【发布时间】:2021-01-21 19:44:27
【问题描述】:

我已经看到了一些单列列表框的解决方案,但对于多列列表框来说没有什么实质性的。

我的列表框有 4 列,值来自 4 个不同的组合框,用户可以在其中选择他们想要的任何值,然后单击“添加”按钮。

以下是我用来实现此目的的代码:

Dim possibleProdInd As String
Dim possibleDim As String
Dim possibleValue As String
Dim possibleScore As Double
Dim countList As Double

possibleProdInd = seg_cbb_IndProd.Value
possibleDim = seg_cbb_selDim.Value
possibleValue = frmSeg.seg_cbb_posVal.Value
possibleScore = seg_tb_posValSco.Value

countList = frmSeg.seg_lb_posValSco.ListCount
    frmSeg.seg_lb_posValSco.AddItem
    frmSeg.seg_lb_posValSco.List(countList, 0) = possibleProdInd
    frmSeg.seg_lb_posValSco.List(countList, 1) = possibleDim
    frmSeg.seg_lb_posValSco.List(countList, 2) = possibleValue
    frmSeg.seg_lb_posValSco.List(countList, 3) = possibleScore

有什么办法可以避免添加重复项吗?

我需要验证的重复项是:

  • 我不能有相同的 Prod+Dim+Value 不同的分数,并且
  • 我不能有重复项(Prod+Dim+Value+Score)

【问题讨论】:

  • 您要避免哪些重复项?整个四边形的重复项或例如相同的 ProdInd+Dim+Value 获得的分数超过 Score?
  • 这是个好问题!所以,我不能有相同的 Prod+Dim+Value 不同的分数,我不能有重复(Prod+Dim+Value+Score)。是否有意义? :)
  • 您可以创建一个包含 Prod+Dim+Value 组合的集合,添加到集合中,如果此组合的 Prod+Dim+Value 不存在,也将其添加到列表框。
  • @EvR 这些集合是如何工作的?对不起,我对 VBA 很陌生,所以我还不太了解!

标签: excel vba


【解决方案1】:

我不相信列表框本身有任何功能可以让您这样做。

您需要将验证编码到 Add 事件中。根据您期望在组合框和“结果”列表中的条目数量,有多种方法可以做到这一点。

一些想法:

  • 设置一个数组 (n,4),其中 n 是列表框项的数量,并用现有值填充它。
  • 检查新的值集是否与现有值集不冲突。

如果您希望列表框变满,那么每次用户单击“添加”时都需要花费一些时间,因此请考虑不要每次都创建数组,而是维护一个全局(可能仅限于该表单)变量 Array up添加项目的日期将节省时间。

您还可以通过不在数组中保存所选字符串而是在组合框中的隐藏列中设置唯一索引来节省一些时间,以便将该数字保存在数组中 - 数字比较比字符串比较快。

您也可以只使用 (n) 数组并保存条目 ID 和分数的串联。如果每个组合框的条目不超过 10 个,则此串联将是例如 27613,表示分配了来自第一个组合框的 ID 为 2、来自第二个组合框的 ID 为 7、来自第三个组合框的条目为 6 且得分为 13 的项。 (或者只是您的第一个约束的 3 位数串联)

如果每个组合中有超过 10 个条目,您必须将上述内容表示为例如 102070613(添加前导 1 以允许前导 0 保持数字的明确解释/拆分)

将这个串联的数字与潜在的新条目进行比较应该比单独比较这 4 个项目中的每一个更有效。

【讨论】:

  • 我会看看如何实现你的想法,谢谢你的建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多