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

问题描述 投票:2回答:2

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

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

这是我到目前为止:

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
arrays excel vba listbox
2个回答
1
投票

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


0
投票

ColumnHidden属性仅适用于RowSource查询,并且不会在列表框值中包含该列。如果您希望值仍然在列表框中并被隐藏,则在VBA中执行此操作的唯一方法是通过ColumnWidths属性。

要隐藏第4列(索引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)

虽然我不建议在嵌套循环中执行此操作,因为它只需要执行一次。

除非指定宽度,否则其他列的宽度将相等。

我知道这可能对原始海报不再有用,但它可能会帮助其他人(比如我)仍然遇到这个问题。当您希望用户能够操作列表框中的数据时,隐藏Key列非常有用。

© www.soinside.com 2019 - 2024. All rights reserved.