4

我的主要目标是复制自动过滤器的可见单元格,然后将可见单元格的尺寸复制到新工作表中。我正在使用这段代码:

Sheets(1).AutoFilterMode = False
Sheets(1).Range("A1:A1").AutoFilter Field:=columnaNumeroIntervalo, criteria1:=CDec(paramCantidadCriterio)
Sheets(1).Range("A1:A1").AutoFilter Field:=columnaNumeroIntervaloUnidades, Criteria1:=paramUnidadesCriterio

MsgBox AutoFilter.Range.SpecialCells(xlCellTypeVisible)(2, 11).Value

最后一行我想检查值 oa 单元格。如果我使用Cells(2,11)而不是,SpecialCells我可以看到单元格具有工作表的所有单元格,可见和不可见。所以我想用SpecialCells.

如果我使用特殊单元格,我会收到以下错误:

error '-2147417848 (80010108) in runtime. Automatization error.

对于一次执行的类型,它似乎进入了一个循环,最后给出了这个错误。也许 SpecialCells 修改了自动过滤器,然后在每次修改中再次执行自动过滤器?

4

1 回答 1

7

要使用自动过滤器的可见单元格,Offset如果您打算排除标题,则必须使用。你得到的错误是因为你错过了一个“。” 前Cells(2,11)

'~~> Remove any filters
ActiveSheet.AutoFilterMode = False

'~~> Filter, 
With rRange 
  .AutoFilter Field:=1, Criteria1:=strCriteria

  '~~> offset(to exclude headers)
  Debug.Print .Offset(1, 0).SpecialCells(xlCellTypeVisible).Cells(2,11).Value

  Debug.Print .SpecialCells(xlCellTypeVisible).Cells(2,11).Value
End With

'~~> Remove any filters
ActiveSheet.AutoFilterMode = False

我决定将此添加为此答案的一部分,以便将来可能对其他人有所帮助。

假设我们的范围是

A1:F6

在此处输入图像描述

当你运行下面的代码时,根据你是否使用Offset,你会得到这些结果。

Option Explicit

Sub Sample()
    '~~> Remove any filters
    ActiveSheet.AutoFilterMode = False

    Dim rRange As Range
    Dim Rnge As Range

    Set rRange = Sheets("Sheet1").Range("A1:F6")

    '~~> Filter,
    With rRange
      .AutoFilter Field:=1, Criteria1:="<>2"

      '~~> Offset(to exclude headers)
      Set Rnge = .Offset(1, 0).SpecialCells(xlCellTypeVisible)

      Debug.Print Range(Rnge.Address).Address
      Debug.Print ActiveSheet.Cells(3, 2).Address
      Debug.Print Range(Rnge.Address).Cells(3, 2).Address

      Debug.Print "--------------------------------------------------"

      '~~> To include headers
      Set Rnge = .SpecialCells(xlCellTypeVisible)

      Debug.Print Range(Rnge.Address).Address
      Debug.Print ActiveSheet.Cells(3, 2).Address
      Debug.Print Range(Rnge.Address).Cells(3, 2).Address

    End With

    '~~> Remove any filters
    ActiveSheet.AutoFilterMode = False
End Sub

在此处输入图像描述

高温高压

于 2012-04-25T15:54:15.980 回答