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

时间:2016-03-24 22:38:22

标签: arrays excel vba listbox

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

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

这是我到目前为止所做的:

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 个答案:

答案 0 :(得分:1)

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)

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

除非指定宽度,否则其他列的宽度将平均分配。

我知道这可能对原始海报不再有用,但可以帮助仍然遇到此问题的其他人(如我)。当您希望用户能够操纵列表框中的数据时,对于隐藏“键”列非常有用。

答案 1 :(得分:0)

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