簡體   English   中英

excel vba-使用自動過濾器-無法將過濾后的范圍傳遞給子項,它會不斷傳遞整個圖紙范圍

[英]excel vba - Using autofilter - can't pass the filtered range to a sub, it keeps passing the entire sheet range

我似乎無法弄清楚這一點。 我有一個函數和一個子函數,在其中調用函數以從已經從自動過濾器中選擇的范圍中獲取唯一值(從N列(文本值))。 不知何故,范圍始終是整個圖紙范圍,而不是選定范圍。

Function UniquesFromRange(rng As Range)
Dim d As Object, c As Range, tmp
Set d = CreateObject("scripting.dictionary")
For Each c In rng.Cells
   tmp = Trim(c.Value)
   If Len(tmp) > 0 Then
        If Not d.Exists(tmp) Then d.Add tmp, 1
   End If
Next c
UniquesFromRange = d.Keys
End Function




Sub mainSub()
For Each key In fCatId.Keys
    With wshcore
        llastrow = wshcore.Range("A" & Rows.Count).End(xlUp).Row
        .AutoFilterMode = False
        .Range("A1:N" & llastrow).AutoFilter
        .Range("A1:N" & llastrow).AutoFilter Field:=1, Criteria1:=fCatId(key)
        lwmin = WorksheetFunction.Subtotal(5, Range("H:H"))
        lwmax = WorksheetFunction.Subtotal(4, Range("H:H"))

        'This does not work,  I want to get the unique values from column N
        'that are already in the filtered range. So far this shows
        'all the values in the column not only the ones already filtered.

         varArray = UniquesFromRange(Range("N:N"))
         'I've also tried this:
        'varArray = UniquesFromRange(Range.Cells)


         'Debug.Print fCatId(key) & " - " & key & "   " & lwmin & "-" & lwmax  & fData(key) & " - " & Join(varArray, vbNewLine)



    End With
Next key
Application.ScreenUpdating = True
End Sub

有什么建議么?

代替

varArray = UniquesFromRange(Range("N:N"))

采用

varArray = UniquesFromRange(Range("N1:N" & llastrow).SpecialCells(xlCellTypeVisible))

為了回應注釋中提出的其他問題,您可以將varArray復制到另一張表(假定已經存在,並由對象wsOutput引用,並輸出到A列),如下所示

Dim r as Integer
For r = LBound(varArray) To UBound(varArray)
    wsOutput.Cells(r, 1).Value = varArray(r)
Next

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM