2014-10-10 80 views
1

我有下面提到的代码,我试图将已过滤单元格仅加载到列表框中,但我不知道为什么下面提到的代码不起作用。VBA Excel:仅在列表框中显示可见单元格

图例:

  • PatternSearchButton是一个按钮
  • PatternTextBox是由用户输入的值,片材将过滤文本框。
  • WsLookup是选择的片材(功能完全)

    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 
    
+0

'AvailableNumberList'是一个全局对象吗?如果是,它的类型是什么?如果不是,应该是什么班级? – 2014-10-10 09:58:25

+0

@ cst-link'AvailableNumberList'是列表框本身 – 2014-10-10 10:04:21

+0

代码是否在'.AddItem WsSelector [']行发出错误?而且,既然我们在这里,你是否在代码中使用'On Error Resume Next'? – 2014-10-10 10:11:48

回答

1

你正在使用PatternCounter如在For .. Next上限的函数,但这是被使用MAX设置(例如)SUBTOTAL的子功能。这可能对未过滤列表中的连续数字有效,但在过滤列表中不太准确。使用COUNT2/102)或COUNTA3/103)子功能可能更合适。

您正在使用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 
+0

这就是我需要的。我也想过滤一个字符串,你会建议使用什么而不是counta,它似乎不起作用。 – 2014-10-10 11:04:51

+1

@mario R. - 上面的代码片段旨在被纳入您在原始问题中包含'.AutoFilter'语句的代码中。关于*'过滤一个字符串'*,除此之外,没有什么可以继续。您是否可以修改您的原始问题或创建一个具有足够附加信息的新问题以提供解决方案? – Jeeped 2014-10-10 11:31:49

+0

确定的事情:) @jeeped – 2014-10-10 11:33:46

1

问题可能源于您将列表框添加到特殊单元格的值(如果单元格隐藏时可能不存在)的事实。

拉升For循环体:

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

同时,确保AvailableNumberList点在代码中正确的对象。

相关问题