【问题标题】:Disable selecting certain items in listbox?禁用选择列表框中的某些项目?
【发布时间】:2018-04-24 14:03:21
【问题描述】:

我有一个多选列表框,我需要禁止用户选择列表框中的某些项目。我试过查看列表框启用,但这似乎只适用于整个列表框。有任何想法吗?这是我的列表框,我目前正在遍历该项目,希望禁用该项目:

Dim lItem As Long
For lItem = 0 To Sheet1.ListBox1.ListCount - 1
    If Sheet1.ListBox1.Selected(lItem) Then
        Sheet1.ListBox1.Enabled(lItem) = False ' don't work?
    End If
Next

【问题讨论】:

  • 信息有限,但您不能有 2 个单独的列表框,并且只为您的用户启用一个吗?
  • 我可能错了,但我认为您不能“禁用”列表框中的一组行。但是,也许您可​​以在每次选择一行时检查它是否符合您的禁用条件,如果是,请取消选择它?
  • 我只想要 1 个,其中只能选择某些行,而不能选择其他行。
  • 列表框是多选的吗?
  • @CLR 是的,它是多选。

标签: vba excel listbox


【解决方案1】:
For it = 0 To Sheet1.ListBox1.ListIndex 

  If Sheet1.ListBox1.Selected(it) Then
     Sheet1.ListBox1.Selected(it) = False 
     Sheet1.ListBox1.RemoveItem (it)   
  End If

Next

Line1 : 遍历列表框的所有索引

Line2 : 找到选中的项目

第 3 行:取消选择

Line4 : 移除选中的项目

【讨论】:

    【解决方案2】:

    选项 1: 这需要用户的选择并有效地删除它,同时保留所有项目的原始 ListIndex。

    Listbox1.List(MyListbox1.ListIndex) = " "
    

    然后您可以使用代码检查“”的值

    选项 2:Listbox1.List(Listbox1.ListIndex) 从一列(可见)移动到另一列不可见(宽度 = 0)。如果您需要恢复它(使其成为有效选项),这还将保留原始 listindex 顺序和值。

    选项 3: 要获得灰显行的错觉,只要没有滚动条,您就可以在列表框上放置带有灰色背景的无边框标签。 .top 值需要使用列表框的 .top 加上 X * ListIndex 来计算,以将其直接放在不可用的选项上。然后将标签的标题 = 设置为列表框选择。 (我从来没有说过这很容易,只是有可能)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多