• ベストアンサー

エクセル マクロ 関数

フィルタ機能を実行中(行が歯抜けになっている状態)は ファイルを閉じる事が出来ない仕様にできないでしょうか? もしくは メッセージボックスにて注意喚起が出来ればありがたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

ご相談では,「どのシートで」という動作の条件が説明されていません。 手順: 当該のブックのThisWorkbookシートに書きをコピー貼り付ける private sub Workbook_BeforeClose(Cancel as boolean)  dim flg as boolean  dim w as worksheet  for each w in thisworkbook.worksheets   flg = flg or w.filtermode  next  if not flg then exit sub  msgbox "Sheet(s) filterd"  cancel = flg end sub オートフィルタを取り付けたり取り外したり絞り込んだりして,保存して閉じる操作を実際に手を動かして行ってみる。 ちなみに 既出回答は「絞られている」を調べていないので,よく注意して動作確認して下さい。

noname#225437
質問者

お礼

的確なご回答に感謝します。 ありがとうございました。

noname#225437
質問者

補足

動作確認しましたが希望通りのものでした。 ただし、 1.フィルターを実行中に上書き保存 2.フィルターを外し、閉じるを押す 3.『'○○○○.xls'への変更を保存しますか?』の問いに いいえを選択  この場合のみ、フィルターがかかったまま閉じることになりました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

>ちなみに既出回答は「絞られている」を調べていないので, >よく注意して動作確認して下さい。 その通りでした。 しっかりテストをしていませんでした。 質問者さんが思っていることとは逆かもしれないですが、 「フィルターがかかっていたら全部開く」 という方法もあります。 そっちのほうが簡単かもしれません。 Private Sub Workbook_BeforeClose(Cancel As Boolean)'閉じるときに実行  With ThisWorkbook.Worksheets("Sheet1")'シート名が「Sheet1」のとき  If .FilterMode = True Then'フィルターがある場合   .ShowAllData'すべて開く   End If  End With End Sub シート名が違う場合は、 ("Sheet1")の部分を変更し、 ("Sheet2")や、("テスト")などシート名にあわせた変更をお願いします。 また、チェックしたいシートが二つ("Sheet1")と("Sheet2")の場合 Private Sub Workbook_BeforeClose(Cancel As Boolean)'閉じるときに実行  With ThisWorkbook.Worksheets("Sheet1")'シート名が「Sheet1」のとき  If .FilterMode = True Then'フィルターがある場合   .ShowAllData'すべて開く   End If  End With  With ThisWorkbook.Worksheets("Sheet2")'シート名が「Sheet2」のとき  If .FilterMode = True Then'フィルターがある場合   .ShowAllData'すべて開く   End If  End With End Sub 上記のように、With から End Withまでの部分をコピーし シート名のみ変更すると使えると思います。 以上、訂正と、参考まで

noname#225437
質問者

お礼

>フィルターがかかっていたら全部開く フィルターを全部解除するという意味で読み解いたのですが、 自分が未熟なせいか、うまくいきませんでした。 補足ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.1

ThisWorkbookの中に、 Private Sub Workbook_BeforeClose(Cancel As Boolean) End Sub と書き込むと良いかもしれません。 閉じる前に実行するプログラムだった気が・・・ Private Sub Workbook_BeforeClose(Cancel As Boolean)  If ActiveSheet.AutoFilterMode Then  MsgBox "フィルタがかかってます"  Cancel = True  End If End Sub

noname#225437
質問者

お礼

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

すると、全ての回答が全文表示されます。

関連するQ&A