マクロの概要(入門用) エラー処理について(Ver9.34対応版)
エラー処理について
マクロ実行中に文でエラーが発生した場合、秀丸マクロでは使用した文の内容に合わせたエラーメッセージが表示されるようになっています。
エラーメッセージを「OK」ボタンで消去すると、次に「マクロの実行を中止しますか?」というメッセージが表示されます。
「はい」ボタンを押すとマクロは中止(終了)しますが、「いいえ」ボタンを押すとそのまま継続して実行されます。
エラーの発生した文は正常終了していませんので、マクロを継続しても予想される結果は得にくいので「はい」でマクロを終了させるようにしてください。
エラー時に表示されるメッセージは時としてわかりにくかったりもします。
たとえば、appendsave "merge.txt";とマクロで記述していて、そのマクロ実行時にエラーが起きた場合のメッセージは「merge.txtは他のプログラムが使用中等の理由により開けません」と表示されます。
「appendsave "merge.txt";」という文の意味は、現在表示されている内容(文章)をカレントディレクトリ(現在表示されているファイルを開いたディレクトリ)の
「merge.txt」というファイルへ追加保存(すでに保存されている文章の末尾に追加して保存する)しなさいと指示しています。
この場合のエラーメッセージは「追加書き込みに失敗しました」と表示するほうがわかりやすいですし、その次に表示される「マクロの実行を中止しますか?」というメッセージを表示させなくとも、
マクロが終了する仕組みを記述したほうが実用的です。こう、自分にとってわかりやすいようにエラー時の処理をさせる(マクロを組んで)ことを「エラー処理」といいます。
エラーが発生した場合を想定して、そのエラーに合わせたメッセージを表示するなどして自動でマクロを終了させるか、または違う処理へと分岐させるよう記述します。
エラー処理を実行するためには、エラーが発生したかどうかを検出する方法が必要です。文を実行した場合、「
result 」という変数に処理の結果が自動的に代入されています。
正常終了の時は「
result == true 」となり、エラー発生時は「
result == false 」となります。
文を次々実行していく場合は、ひとつずつの文ごとに検証しては変数「result」の値( true または false )を結果として出し、その値に毎回書き換えられていきます。よって、「result」の値は直前の文の結果が代入されています。
上記の場合を想定した具体的なエラー処理の記述です。
文「
disableerrormsg 」は、エラーが発生してもエラーメッセージを表示しないようにします。
文「
enableerrormsg 」エラー発生時にはエラーメッセージを表示するようにします。
例 |
disableerrormsg;
appendsave "merge.txt";
if(!result ){ //エラー発生時以下の文を実行します
message "merge.txtへの追加書き込みに失敗しました";
enableerrormsg;
endmacro; //マクロを終了させます
}
enableerrormsg;
|
最後に「enableerrormsg」を実行させていますが、これは想定されたエラー以外のエラー発生時にメッセージを表示させるためです。