如何使用VBA在多列列表框中隐藏列

3

我正在使用二维数组将数据加载到多列列表框中。

我想隐藏特定的列,但不知道如何做。我不能只排除数据 - 因为我希望将其作为隐藏列稍后引用 - 但我不希望用户看到它。

这是我目前的代码:

For x = 0 To UBound(ReturnArray, 2)
NISSLIST.ListBox1.Clear 'Make sure the Listbox is empty
NISSLIST.ListBox1.ColumnCount = UBound(ReturnArray, 1) 'Set the number of columns
'Fill the Listbox
NISSLIST.ListBox1.AddItem x 'Additem creates a new row
For y = 0 To UBound(ReturnArray, 1)
    NISSLIST.ListBox1.LIST(x, y) = ReturnArray(y, x) 'List(x,y) X is the row number, Y the column number
    If y = 3 Then 'Want to hide this column in listbox
         NISSLIST.ListBox1.NOIDEA '<<< HELP HERE <<<, What do I put to hide this column of my multi-column listbox????
    End If
   Next y
 Next x
2个回答

4

ColumnHidden属性仅适用于RowSource查询,并且不会将该列包含在列表框值中。 如果您希望值仍然在列表框中但被隐藏,那么在VBA中实现的唯一方法是通过ColumnWidths属性。

要隐藏第四列(索引3),请放置以下代码:

NISSLIST.ListBox1.ColumnWidths = (";;;0cm")

如果您想像问题中的循环一样,可以这样做:

Dim strWidths As String
For y = 0 To UBound(ReturnArray, 1)
    If y = 3 Then
        strWidths = strWidths + "0cm;"
    Else
        strWidths = strWidths + ";"
    End If
Next y
NISSLIST.ListBox1.ColumnWidths = (strWidths)

尽管我不建议在嵌套循环中这样做,因为它只需要执行一次。

其他列的宽度将被平均分配,除非您指定了宽度。

我知道对于原帖发布者来说可能已经不再有用了,但它可能会帮助其他人(比如我)遇到这个问题。当您想要用户能够在列表框中操作数据时,它非常有用,可以隐藏密钥列。


这是解决方案。为了国际化,我使用 Application.International(xlListSeparator) 将宽度值连接到列宽定义字符串中。我曾经有一些关于单元格验证和 ; 的不好的经历。 - DrMarbuse

0

通过MSDN NISSLIST.ListBox1.Column(x,3).ColumnHidden=-1


返回运行时错误381:“无法获取列属性。无效的属性数组索引。” - Johnson Jason
1
尝试使用2代替列?编辑:嗯,但你从0开始...不确定XD 编辑2:哦,y是行,而不是索引。请参见上面的编辑。 - findwindow
1
如果用户在引用组合框或列表框中的列时没有进行任何选择,则列属性设置将为 Null。噢,所以显然只有在选择了某些内容后,该属性才会起作用 XD。 - findwindow
1
哦,这只是谷歌。我不会去阅读如何选择某些内容,但错误提示表明“nisslist”存在问题。 - findwindow
1
是的,我不确定发生了什么:/ - findwindow
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接