よろしくお願いいたします。
Excelでの質問です。
シート上にコマンドボタンを配置して、それをクリックすることで、様々な計算等の一連の処理を行なうように作りました。
そこまで来て、その処理に時間がかかるのが気になったため、「処理中です。手をふれないでそのまま待っててください」と表示させるためのフォーム(F_wait)を作り、処理開始から処理終了まで表示させることとしました。
処理の開始時に
F_wait.show
とだけ書くと、その時点で処理が中止されてしまうことがわかり、自分なりに調べたら
F_wait.show vbmodeless
と書けば、処理が中断せずに進行すると知り、そのようにして上手くいきました。
次に、同ファイルの別の場所での機能なのですが、あるモーダルフォームF1を表示させていて、そのF1上にあるコマンドボタンにも、
F1上のテキストボックスF1.txt1に入力されている値を使って、計算したり印刷したりシートのコピーを別ファイルとして保存したりといった、
一連の処理を作成しました。
この処理も処理に時間がかかるため、F_waitを表示させようとしたのですが、今度は
「モーダルフォームが表示されているときは、モードレスフォームを表示できません」とエラーが出て来てしまいます。
仕方がないからと、処理スタート時に、一旦
unload F1 F_wait.show modeless
とするわけにはいきません。
実行したい処理において、F1上のテキストボックスの値を参照したいからです。
とはいえ、F1の上にF_waitをモーダルでshowすると処理が止まってしまいます。
パッと思いつく対策は、F1上のテキストボックス群の諸値を変数に持ち、F1がunloadされた後でもその変数を用いて処理を続行する、ということなのですが、
しかし、この方法は、あまりスマートじゃない感じがするのと、
見た目的に、大きなF1がクリック後も表示されたままその中央あたりに小ぶりなF_waitが重なるように表示されることで、使用者にとってちゃんと何らかの処理がされているんだなという印象を持たせることができそうなので、そうしたいです。
デモデモダッテになりますが、だからといって、F_waitは、他の処理や今後の機能拡張でも使い回したいので、F_wait自体に処理のコードを書くもの避けたいです。
こういう状態でグダグダとしているのですが、何かいい方法はないでしょうか?
「お待ちください」表示フォームのことをまったく考えないでほとんどの処理を書いてしまったのがまずかったとは思ってるのですが、どうしたもんでしょう?
経験豊富な方はどうしておられるのか教えてください。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/25 00:28
2019/02/25 16:48