在AutoFilter之后取可见范围

问题描述 投票:2回答:2

我试图选择过滤行到范围变量xRange。我需要对该范围进行一些操作。在过滤之前,有超过10000行。过滤后,它是5000行。所以在过滤后我尝试了这个以获得过滤范围,这个范围没有达到预期效果。

With Sheets("FullInvoice").Range("A1:N" & lRow)
    .AutoFilter
    .AutoFilter Field:=6, Criteria1:=">=" & fD, Criteria2:="<=" & lD

End With
Set xRange = Sheets("FullInvoice").Cells.SpecialCells(xlCellTypeVisible)

我在Set xRange线上添加了一个断点。并尝试了xRange.rows.count。但它刚刚返回1即使有5000行。那么我的目的是在过滤后获取第一个单元格的单元格值。我怎样才能做到这一点。

当我尝试

dim s as string
s=xRange.Range("A1").value

它返回整行的第一个单元格值。不是来自过滤的行。

那么如何解决这种情况呢。

excel vba excel-vba
2个回答
1
投票

试试这个代码

    With Sheets("FullInvoice").Range("A1:N" & lrow)
    .AutoFilter
    .AutoFilter Field:=6, Criteria1:=">=" & fd, Criteria2:="<=" & ld
End With

With Sheets("FullInvoice").Range("A1").CurrentRegion
    Set xRange = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
End With
MsgBox xRange.Address

Dim s As String
s = xRange.Range("A1").Value
MsgBox s

2
投票

它比那更容易。只需将xrange带入你的With。此外,我使用Range.Cells(x,y)而不是Range.Range来获取范围内的单元格:

With Sheets("FullInvoice").Range("A1:N" & lRow)
    .AutoFilter
    .AutoFilter Field:=6, Criteria1:=">=" & fD, Criteria2:="<=" & lD
    Set xrange = .SpecialCells(xlCellTypeVisible)
End With

MsgBox xrange.Cells(1, 1)
© www.soinside.com 2019 - 2024. All rights reserved.