2015-11-17 42 views
0

我有一個可過濾的聯繫人數據庫和用戶窗體。我想要的是用戶窗體上的2個計數器。 lblSelection應該給出數據集的總量。而lblCount應該在整個數據集中給出所選單元格的位置。Excel VBA如何找到過濾工作表的ActiveCell計數

類似「你是在一套300 45」

現在,當數據庫被過濾應改爲例如「你是在67集6」,僅使用可見細胞計數的位置該範圍內的選定單元格。

下面是簡單的代碼我使用至今:

Public Sub CountReset() 

    'Display Count 
     If ActiveSheet.FilterMode = False Then 
      Me.lblCount = activecell.Row - 1 
      Me.lblSelection = activecell.Offset(-1, 0).End(xlDown).Row - 1 

     Else 
      Me.lblCount = ???? 
      Me.lblSelection = Base.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1 
     End If 

    End Sub 

已經感謝您的幫助!

回答

1

我認爲你需要這樣一個循環:

Public Sub CountReset() 
    Dim n      As Long 
    Dim rCell     As Range 
    'Display Count 
    If ActiveSheet.FilterMode = False Then 
     Me.lblCount = ActiveCell.Row - 1 
     Me.lblSelection = ActiveCell.Offset(-1, 0).End(xlDown).Row - 1 

    Else 
     n = -1 
     With Base.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible) 
      For Each rCell In .Cells 
       n = n + 1 
       If rCell.Row = ActiveCell.Row Then Exit For 
      Next 
      Me.lblCount = n 
      Me.lblSelection = .Cells.Count - 1 
     End With 
    End If 

End Sub 
+0

完美!馬上就解決了。非常感謝,Rory! –

0

你幾乎明白了。

Public Sub CountReset() 

    Me.lblCount = activecell.Row - 1 ' this will be the same if it's filtered or not 

    If ActiveSheet.FilterMode = False Then 

     Me.lblSelection = activecell.Offset(-1, 0).End(xlDown).Row - 1 

    Else 

     'assuming base is a defined table or named range ... also no need to filter it because it's already filtered 
     Me.lblSelection = Base.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1 

    End If 

End Sub 
+0

謝謝你的回覆快斯科特。這個代碼的問題是,它給我的行號(-1),但不是其中的計數。例如,如果我過濾一列15行的條件。我的第一組將在第三排,第二排在第九排,第三排在第11排等。所以使用ActiveCell.row將讀取3,9,11,而它應該讀取1,2,3 ...任何想法? thx再次! –

+0

什麼定義了一個'set'?行中是否有列定義集合?或者是否有定義該集合的行列表? (即 - 設置1是1-3行,設置2是4-9行,設置3是10-11? –

+0

有幾個可能的列來定義一個集合,例如城市,國家,公司類型,等級。用於定義過濾器設置,它是用戶表單上的組合複選框和文本字段,用於定義這些搜索條件,因此一組總是隻有一行 –