VBA Excel:仅在列表框中显示可见单元格

我有下面提到的代码,我想加载过滤的单元格只能进入列表框,但我不知道为什么下面提到的代码不起作用。

传说:

  • PatternSearchButton是一个button
  • PatternTextBox是一个文本框,用户通过该文本框input一个表单将要过滤的值。
  • WsLookup是一个function,select表(function完整)

    Private Sub PatternSearchButton_Click() Dim PatternInput As String, PatternCounter As Double, WsSelector As Worksheet PatternInput = PatternTextBox.Value Set WsSelector = WsLookup(GSMListType.Value) WsSelector.Range("F:F").AutoFilter Field:=1, Criteria1:=PatternInput PatternCounter = Application.WorksheetFunction.Subtotal(4, WsSelector.Range("F:F")) With AvailableNumberList .Clear For k = 2 To PatternCounter + 1 .AddItem WsSelector.Range("A" & k).SpecialCells(xlCellTypeVisible).Value Next k End With End Sub 

您正在使用PatternCounter作为For .. Next上限,但是这是使用SUBTOTALMAX (例如4 )子函数设置的。 这可能对未过滤列表中的连续数字起作用,但在已过滤列表中不太可能是准确的。 使用COUNT2/102 )或COUNTA3/103 )子function可能更合适。

你正在使用SUBTOTAL(4, ...)所以我会假设你正在处理数字。 直接使用F列中可见单元格上的数字,并修改代码的其余部分以使其类似于此。

  PatternCounter = Application.WorksheetFunction.Subtotal(2, WsSelector.Range("F:F")) With WsSelector.cells(1,1).currentregion.offset(1,0).SpecialCells(xlCellTypeVisible) AvailableNumberList.Clear For k = 1 To PatternCounter AvailableNumberList.AddItem .cells(k, 1).Value Next k End With 

这个问题可能源于这样一个事实,即如果单元格被隐藏,那么您将添加到列表框中的特殊单元格的值可能不存在。

尝试For循环的主体:

 ' ... previous code ' If Not WsSelector.Rows(k).EntireRow.Hidden Then .AddItem WsSelector.Cells(k, 1).Value End If ' rest of the code ... ' 

另外,请确保AvailableNumberList指向您的代码中正确的对象。