- ベストアンサー
Excel VBAで2つの処理を同時実行可能?
- Excel VBAで2つの処理を同時実行する方法についてお知らせください。
- メイン処理が時間がかかるため、フォームを表示させて動作中であることを示したいです。
- 使用者が動いていることを確認できる方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
単純に、HTMLファイルを表示するとかいうのではだめでしょうか?VBAに影響を与えることなくブラウザ側が勝手にやってくれるので、負荷は少ないように思うのですが。 的を外した回答でしたらすみません。
その他の回答 (2)
- nda23
- ベストアンサー率54% (777/1415)
残念ですがVBAはマルチスレッドは処理できません。 私は必要に迫られて、機械語をバイト配列に詰め込み、 CreateThreadでこの機械語に別スレッドで処理させる という手段をしばしば使いますが、Windowsのアーキ テクチャ、機械語、マルチスレッドの同期などの知識が ないと成功しません。 実現手段として思いつくのは新たなウィンドウを別の スレッドで作成して点滅させるものです。 但し、Hellow World をCだけで作る技量がなければ 実現はできません。 ネットを探すと、都合のよいコントロールがあるかも 知れませんが、ウィルス感染の危険もあるので、簡単に 手を出すのも考え物です。 #1の方の提案にもありましたように、別プロセスなら 処理できますので、HTA等で点滅ウィンドウを表示させ、 用が済んだらプロセスを終了させるという方法もあると 思います。こちらはAPIだけで制御できます。 CreateProcessで起動、TerminateProcessで終了です。 また、APIでなくWSHのRunメソッドでも起動できます。 ただ、こちらは終了させる方法がありませんが・・・ もっとも、別プロセスなので処理の終了前に利用者が 勝手に閉じてしまうこともあります。
お礼
nda23さま 回答ありがとうございます。 色々な方法をご紹介頂いてありがとうございます。 VBAでマルチスレッドが出来ないことが確認出来て 良かったです。 私はCの知識が無いため今回はnac03056さまに 提案頂いたHTML(HTA)の方法で行こうと思います。 どうもありがとうございました。
- DreamyCat
- ベストアンサー率56% (295/524)
mainの中でDoEventsを多用してApplication.Ontimeを動作させることはできますが、Excel2010でやってみたところ、単純なカウンターの場合に速度が20倍くらい遅くなりました。 2003版では数倍程度で収まるかもしれませんが、長い処理がさらに何倍も長くなるのは得策ではないと思います。 単にuserformをmodalで使えないようにして「動作中」などの表示をさせておくとか、使用中の札を置いておくとかするのがいいかと思います。
お礼
DreamyCatさま 回答ありがとうございます。 そうですね、これ以上処理が長くなるのはちょっとつらいです。 ステータスバーを使って進捗表示させることも考えましたが 時間がかかる処理の主の原因はVBAから呼び出すVBScript でして、結局ステータスバーが動かず、「動いてるかどうか 分からない」状態になってしまいます。 モーダルにして使用者が操作できなくするというのもありかと 思いますが、出来ることならチカチカさせたいです。
お礼
nac03056さま 回答ありがとうございます。 HTMLとは思いつきませんでした。 早速やってみます。