[780] if文内のMacroTerminate() の挙動
セル内計算式愛用者 [2023/09/17 14:39:32]
セル内の状態によって、マクロ実行を中断しようとしたところ、if文内の MacroTerminate() が無効なようです。
(=マクロ実行が中断されず、継続する)
これが、意図された挙動かどうか確認いただけると幸いです。
_
実行環境:
Cassava: V.2.5.4(64bit)
OS: Windows10Pro 22H2 (build 19045.3448)
(2023年9月までの月例パッチを適用済み)
_
// テストマクロ
flag1 = true;
str = "";
if (flag1) {
str = "マクロ実行を中断します、その1";
MessageBox(str);
MacroTerminate();
}
//継続する処理
str = "マクロ実行を継続します。";
MessageBox(str);
flag2 = false;
if (flag2) {
str = "マクロ実行を中断します、その2";
MessageBox(str);
MacroTerminate();
}
str = "マクロ実行が終了しました。";
MessageBox(str);
_
○想定する挙動:
"マクロ実行を中断します、その1"のダイアログでOKを押してマクロが止まる。
○実際の挙動:(V2.5.4)
"マクロ実行を中断します、その1"のダイアログでOKを押したあと、"マクロ実行を継続します。"、"マクロ実行が終了しました。"のダイアログが表示される。
(マクロ中断(MacroTerminate()が実行されず、処理が継続している)
Re: [780] if文内のMacroTerminate() の挙動
あすかぜ [2023/09/18 08:17:07]
ご指摘ありがとうございます。
今のところ MacroTerminate(); は [マクロ(M)]-[実行を中断(T)] メニューをクリックするという動作になっており、
マクロを即座に中断するわけではなくその後の適当なタイミングまで処理が進められてしまいます。
特に意味があってこの挙動になっているわけではないので、
すぐにマクロを中断するように処理を変更することを検討したいと思います。
関数外で return; 命令を実行するすぐにマクロが中断されるので、
当面は MacroTerminate(); のかわりに return; を使ってみてください。
よろしくお願いします。
Re: [780] if文内のMacroTerminate() の挙動
あすかぜ [2023/09/18 21:01:29]
Ver.2.6 α1 で、MacroTerminate() ですぐにマクロを終了するように変更してみました。
https://www.asukaze.net/soft/cassava/history/2_6dev.html
Re: [780] if文内のMacroTerminate() の挙動
セル内計算式愛用者 [2023/09/20 17:45:33]
返信遅くなりました。
>今のところ MacroTerminate(); は [マクロ(M)]-[実行を中断(T)] メニューをクリックするという動作になっており、
>マクロを即座に中断するわけではなくその後の適当なタイミングまで処理が進められてしまいます。
なるほど、理解できました。
取り立てて、現在の挙動(中断されずに継続)で困っているわけでもないので、 return; で対処します。
また、次期版での対応ありがとうございます。