プロが教える店舗&オフィスのセキュリティ対策術

なぜShowAllDataだとうまく行かないのでしょう?

「オートフィルタがかかってるなら解除する」
と言うコードを勉強しているのですが

Sub a()
If ActiveSheet.AutoFilterMode = True Then
ActiveSheet.ShowAllData
End If
End Sub

とすると、実行時エラー1004になります。

Sub b()
If ActiveSheet.AutoFilterMode = True Then
ActiveSheet.AutoFilterMode = False
End If
End Sub

すると正常に動きます。

ActiveSheet.ShowAllData= True
にしてもダメでした。

A 回答 (2件)

>なぜShowAllDataだとうまく行かないのでしょう?



何も絞り込まれていない状態では失敗するからです。

なので
sub macro1()
if activesheet.filtermode then ’絞り込まれていたら
activesheet.showalldata
end if
end sub
といった具合に使う手が考えられます。



>ActiveSheet.AutoFilterMode = False

こちらは絞り込みを解除するんじゃなく、オートフィルタそのものを無くします。結果して絞り込みも解除されます。

こちらは
sub macro2()
activesheet.autofiltermode = false
end sub
だけで、オートフィルタのある無しに関係なく、作動します。
    • good
    • 3
この回答へのお礼

ありがとうございました。

お礼日時:2012/11/08 22:33

こんにちは。



'オートフィルタのままで隠れているデータをすべて出す
Sub a_R()
 With ActiveSheet
  If .AutoFilterMode Then
   If .FilterMode Then
    .ShowAllData
   End If
  End If
 End With
End Sub

'オートフィルタそのものの解除(通常は、ボタン)
Sub b_R()
'A1が、データの左上端だとする場合
   ActiveSheet.Range("A1").AutoFilter  'トグルになる
End Sub

>なぜShowAllDataだとうまく行かないのでしょう?
オートフィルタで、隠れているデータをすべて出すという意味で、オートフィルタを解除するということではないから。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2012/11/08 22:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A