当ListBox.RowSource未返回任何结果时,允许列表框不显示任何结果

时间:2017-04-03 18:35:43

标签: excel vba listbox userform

我目前正在使用以下代码填充表单中的ListBox:

'Populate In-Form Table
With ListBox_InFormTable
   .ColumnCount = 4
   .ColumnWidths = "100;100;100;50"
   .RowSource = ws.Range("MasterDataTable").SpecialCells(xlCellTypeVisible).Address
End With

但是,我还会主动过滤列表框中显示的内容以及表单中的其他字段。这工作正常,除非我过滤掉所有结果。而不是得到一个错误,指出:"没有找到细胞。"我只是将表格中的表格留空。

任何帮助都会非常感激,我现在​​已经对这个问题喋喋不休了。

谢谢!

1 个答案:

答案 0 :(得分:1)

你可以试试这样的......

Dim n As Long
With ListBox_InFormTable
   .ColumnCount = 4
   .ColumnWidths = "100;100;100;50"
   On Error Resume Next
   n = ws.Range("MasterDataTable").SpecialCells(xlCellTypeVisible).Rows.Count
   On Error GoTo 0
   If n > 0 Then
    .RowSource = ws.Range("MasterDataTable").SpecialCells(xlCellTypeVisible).Address
   End If
End With

如果您要过滤Excel表格,您可以将过滤后的行计算如下...

Dim n As Long
With ListBox_InFormTable
   .ColumnCount = 4
   .ColumnWidths = "100;100;100;50"
   On Error Resume Next
   n = ActiveSheet.ListObjects("MasterDataTable").Range.Resize(, 1).SpecialCells(xlCellTypeVisible).Count
   On Error GoTo 0
   If n > 0 Then
    .RowSource = ws.Range("MasterDataTable").SpecialCells(xlCellTypeVisible).Address
   End If
End With
End Sub