38

I notice my VBA script doesn't work when there's an autofilter already on. Any idea why this is?

    wbk.Activate
    Set Criteria = Sheets("Sheet1").Cells(i, 1)

    Set rng = Sheets("Sheet1").Range(Cells(i, 2), Cells(i, 4))

    wb.Activate
    If ActiveSheet.AutoFilterMode Then ActiveSheet.ShowAllData 'remove autofilter, but it crashes on this line

    Selection.AutoFilter

    Range("$A$1:$BM$204").AutoFilter Field:=2, Criteria1:=Criteria.Value

    rng.Copy

    Range("$BC$2:$BE$204").SpecialCells(xlCellTypeVisible).PasteSpecial

Many thanks

4

7 に答える 7

55

AutoFilterMode は、特定の列に実際にフィルターが適用されているかどうかに関係なく、使用されている場合は True になります。これが発生した場合ActiveSheet.ShowAllDataでも実行され、エラーがスローされます (実際のフィルタリングがないため)。

私は同じ問題を抱えていて、それを動作させました

If (ActiveSheet.AutoFilterMode And ActiveSheet.FilterMode) Or ActiveSheet.FilterMode Then
  ActiveSheet.ShowAllData
End If

これにより、実際のフィルターが適用されていないが AutoFilterMode がオンになっている場合、ShowAllData の実行が妨げられるようです。

2 番目のキャッチOr ActiveSheet.FilterModeは、高度なフィルターをキャッチする必要があります

于 2013-12-14T09:58:48.180 に答える
5

私はちょうど同じ問題を経験しました。いくつかの試行錯誤の後、選択範囲がフィルター領域の右側にあり、表示されるレコードの数がゼロの場合、ShowAllData が失敗することがわかりました。

もう少しコンテキストが関連している可能性があります。私はいくつかのシートを持っており、それぞれにフィルターが付いています。すべてのシートにいくつかの標準フィルターを設定したいので、このような VBA を使用します

Sheets("Server").Select
col = Range("1:1").Find("In Selected SLA").Column
ActiveSheet.ListObjects("Srv").Range.AutoFilter Field:=col, Criteria1:="TRUE"

このコードは、「In Selected SLA」という見出しが付いた列のフィルターを調整し、他のすべてのフィルターは変更しません。これには、ゼロ レコードを表示するフィルターを作成できるという不幸な副作用があります。これは、UI のみを使用して行うことはできません。

そのような状況を避けるために、上記のフィルタリングを適用する前に、すべてのフィルターをリセットしたいと思います。私のリセットコードは次のようになりました

Sheets("Server").Select
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData

選択したセルを移動しなかったことに注意してください。選択が右側にある場合、フィルターは削除されないため、フィルター コードでゼロ行フィルターを構築できます。コードが 2 回目に (ゼロ行フィルターで) 実行されると、ShowAllData は失敗します。

回避策は簡単です: ShowAllData を呼び出す前に、フィルター列内で選択を移動します。

Application.Goto (Sheets("Server").Range("A1"))
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData

これは Excel バージョン 14.0.7128.5000 (32 ビット) = Office 2010 でした。

于 2014-10-25T10:28:40.333 に答える