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

最後の行で、セルの値を確認します。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

ここに画像の説明を入力

HTH

于 2012-04-25T15:54:15.980 に答える