• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBAにて2つの処理を同時実行可能?)

Excel VBAで2つの処理を同時実行可能?

このQ&Aのポイント
  • Excel VBAで2つの処理を同時実行する方法についてお知らせください。
  • メイン処理が時間がかかるため、フォームを表示させて動作中であることを示したいです。
  • 使用者が動いていることを確認できる方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • nac03056
  • ベストアンサー率48% (203/419)
回答No.2

単純に、HTMLファイルを表示するとかいうのではだめでしょうか?VBAに影響を与えることなくブラウザ側が勝手にやってくれるので、負荷は少ないように思うのですが。 的を外した回答でしたらすみません。

r_joe
質問者

お礼

nac03056さま 回答ありがとうございます。 HTMLとは思いつきませんでした。 早速やってみます。

その他の回答 (2)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

残念ですがVBAはマルチスレッドは処理できません。 私は必要に迫られて、機械語をバイト配列に詰め込み、 CreateThreadでこの機械語に別スレッドで処理させる という手段をしばしば使いますが、Windowsのアーキ テクチャ、機械語、マルチスレッドの同期などの知識が ないと成功しません。 実現手段として思いつくのは新たなウィンドウを別の スレッドで作成して点滅させるものです。 但し、Hellow World をCだけで作る技量がなければ 実現はできません。 ネットを探すと、都合のよいコントロールがあるかも 知れませんが、ウィルス感染の危険もあるので、簡単に 手を出すのも考え物です。 #1の方の提案にもありましたように、別プロセスなら 処理できますので、HTA等で点滅ウィンドウを表示させ、 用が済んだらプロセスを終了させるという方法もあると 思います。こちらはAPIだけで制御できます。 CreateProcessで起動、TerminateProcessで終了です。 また、APIでなくWSHのRunメソッドでも起動できます。 ただ、こちらは終了させる方法がありませんが・・・ もっとも、別プロセスなので処理の終了前に利用者が 勝手に閉じてしまうこともあります。

r_joe
質問者

お礼

nda23さま 回答ありがとうございます。 色々な方法をご紹介頂いてありがとうございます。 VBAでマルチスレッドが出来ないことが確認出来て 良かったです。 私はCの知識が無いため今回はnac03056さまに 提案頂いたHTML(HTA)の方法で行こうと思います。 どうもありがとうございました。

  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.1

mainの中でDoEventsを多用してApplication.Ontimeを動作させることはできますが、Excel2010でやってみたところ、単純なカウンターの場合に速度が20倍くらい遅くなりました。 2003版では数倍程度で収まるかもしれませんが、長い処理がさらに何倍も長くなるのは得策ではないと思います。  単にuserformをmodalで使えないようにして「動作中」などの表示をさせておくとか、使用中の札を置いておくとかするのがいいかと思います。

r_joe
質問者

お礼

DreamyCatさま 回答ありがとうございます。 そうですね、これ以上処理が長くなるのはちょっとつらいです。 ステータスバーを使って進捗表示させることも考えましたが 時間がかかる処理の主の原因はVBAから呼び出すVBScript でして、結局ステータスバーが動かず、「動いてるかどうか 分からない」状態になってしまいます。 モーダルにして使用者が操作できなくするというのもありかと 思いますが、出来ることならチカチカさせたいです。

関連するQ&A

専門家に質問してみよう