2014-10-10 84 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點在代碼中正確的對象。

相關問題