5回も6回もダイアログで確認を取ってくるメンヘラ気味なExcelさん。あまりにも煩わしいのでどうにかならないかと色々試してみた。
そもそも…
そもそもCSVを修正したい場合、秀丸やサクラ等々のテキストエディタで行うのが一般的です。
Excelを使いたい場合は本来正規の手順でインポートしてあげる必要が有ります。
Excelのお節介機能でデータがぐちゃったり問題もありますし。
ただそういった恐れが無い場合や、関数でデータをいじいじしたい場合時等やっぱりExcelで開きたいって方は自分も含めて多いハズ。
かと言って毎度あんなに確認されちゃたまったもんじゃないので、メンヘラ治療を行って見る事に。
通常通り保存した場合ダイアログは5回も出る
どれ位のメンヘラぶりかを実際に見てみましょう。
CSVファイルをエクセルであれやこれやと修正した後に、いつもの感覚で上書き保存を行うと以下の流れになります。
①上書き保存(Ctrl+S)する
②はいを押して✖閉じ(Alt+F4)する
③保存するを押してファイルを指定する
④保存するを押す
⑤はいを押す
一緒に闇落ちしちゃいそう。
これだけの遷移を経てようやく閉じる事が出来るわけです。早速対策を立てていく。
VBAを用いずにダイアログ出現数を2回まで減らす
エクセル初心者の方にお勧めな保存の仕方はこちら。
特に設定を行ったり、VBAを使用せずともダイアログ回数を減らせるので、アクティブディレクトリ等で縛られてる方でも大丈夫。
具体的には選択肢を以下の様に進めば回数を減らす事が可能です。
①上書き保存(Ctrl+S)する
②はいを押して✖閉じ(Alt+F4)する
ここまで普段と遷移同じですが、ここのダイアログで保存しないを選択します。
これでファイルを閉じる事が出来、最後に保存しないを選択しているけれどもデータはしっかり保存されている。
ただどうしても最後に保存しないを選択するのは精神衛生上宜しくない。。
保存されてなかったらどうしよう感が拭えない。
VBA無しだとこれが限界値なので次の治療へ。
VBAを用いてダイアログ出現数を1回だけにする
本当は最初から×閉じを行って、
保存しますか?のダイアログを常に出して、いずれかを選択したらブックが閉じる形が理想形。
でも、csvでどうやってVBAを?と思われるかもしれませんが、個人用マクロブックにその処理を持って置けばExcelが起動されればいつでも呼び出せるわけです。
個人用マクロブックが作成出来たら、標準モジュールに以下を作成してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
Private Sub Auto_Close() Dim fso As New Scripting.FileSystemObject Dim nCnt As Integer Dim nRet As Integer For nCnt = 1 To Workbooks.Count ' csvを閉じた場合 If fso.GetExtensionName(Workbooks(nCnt).Name) = "csv" Then ' アラートを出さない Application.DisplayAlerts = False nRet = MsgBox("'" & Workbooks(nCnt).Name & "'への変更を保存しますか?", vbYesNo + vbExclamation) ' はい が選択された場合 If nRet = vbYes Then ActiveWorkbook.Save End If ' 閉じる ActiveWorkbook.Close ' アラート復元 Application.DisplayAlerts = True End If Next End Sub |
Auto_CloseはExcelが閉じる時に呼ばれるイベントです。
自分の環境は2010環境でレジストリをいじり、複数Excelを開く時は常に別々のアプリケーションで開いているので問題ないですが、一つのExcelアプリケーションで複数ファイルを開いている場合は最後のファイルを閉じた時にしか呼ばれないので注意。
実際に動かすとこうなる
これで無事にあのしつこい確認から逃れることが出来ました。治療完了です。
後は好き好きですが、ActiveWorkbook.Savedで保存後に変更が合った場合のみ確認を出す様にする 等も出来るのでお好みの形にカスタマイズしてみて下さい(ᵔᴥᵔ)
コメント