错误,当我使用自动筛选的SpecialCells获得VBA中可见单元格(Error when I u

2019-06-23 23:24发布

我的主要目标是可见单元格的尺寸复制一个自动筛选的可见单元格,后来复制到新的工作表。 我使用此代码:

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修改自动筛选,然后在每次修改再次执行自动筛选?

Answer 1:

要使用自动筛选的可见细胞正常工作,你必须使用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

HTH



文章来源: Error when I use SpecialCells of AutoFilter to get visible cells in VBA