MS Access VBAの別のスレッドで実行中のプロセスを作成するにはどうすればよいですか?私はちょうど座ってメッセージを待つプロセスを作りたいと思っています。MS AccessのVBA +スレッド
答えて
良い質問ですが、できないと思います。
私が考えることができる最も簡単な方法は、フォームを作成し、それに既存の、またはそれ自身のコントロールを置くことです。
VBA自体でこれを直接行う方法はありません。これについて詳しくはHere is a MSDN forum discussionを参照してください。 OfficeはマルチスレッドのためのVBA拡張を公開しませんでした。
ただし、Windows APIを呼び出したり、マルチスレッド化された呼び出しを実行するVBA(別の場所で書かれた)に独自のCOMオブジェクトを作成することでこれを行うことができます。どうにかして(おそらくあなたのCOMオブジェクト、または同様の何かに対してポーリングする)呼び出しスレッドにすべてをマーシャリングすることを確認してください。
また、COMスレッディングのbendeweyのリンクは、これと非常に関係があるので、チェックしてみてください。
ShellOpen()のようなものを使用して、シェルスクリプトを起動する(例:Visual Basic Script x回、ファイルを介してスクリプトと通信し、結果がいつ到着したかを検出するためのプーリングメカニズム)。私はそれがCOMコンポーネントを書くよりも簡単だと思います。また、VB ScriptはVBAと非常によく似ています。悪い面はかなりありますが、ファイルを書き込んだり読み込んだりするのはメモリを共有するよりも時間がかかり、プーリングするとVBAスクリプトが応答しないように見えることがあります。
DoEventsプロシージャを使用すると、イベント。このサブを随時呼び出してください。メインスレッドはフリーズしません。
これは良い解決策ではありません。悪いです。本当に悪いです – Onkelborg
なぜこのような悪い解決策がありますか?スクリプトでこのアプローチを使用しましたが、うまくいきました。私はちょうど1000ミリ秒または1秒の間隔でDoEventsを呼び出しました。 – Ionut
さて、それは働いたが、それはそれだ。 1秒に1回メッセージに応答するインターフェイスは応答しません。そして、プログラムにポーリングのためだけにコードを実行させるのは悪い習慣です。何も起こらないときにプログラムをスリープさせる方が良いです。他のプログラムは、コンテキストスイッチが少なくなっているため、電力消費量が低下します。 本当にポーリングを行う必要がある場合は、少なくともDoEventsアプローチを使用しないでください。少なくともタイマーを使用すると、メッセージキューが壊れず、アプリケーションが応答しなくなります – Onkelborg
あなたはこの回避策をチェックアウトする場合があります:http://www.excelhero.com/blog/2010/05/multi-threaded-vba.html
それはエクセルですが、それは実質的に同じである必要があります。これは、例を確認してください..「エージェント」VBScriptを構築し、それらがタスクを実行することによって動作してい、それは
-Viggo
- 1. のMS Access - VBA
- 2. VBA(Ms-Access)2013オーバーフローエラー
- 3. MS Access vba - エラー
- 4. MS Access VBAリファレンス
- 5. MS Accessフォームイベント、VBA
- 6. MS Access VBAコード
- 7. MS AccessのVBA - PDF
- 8. MS Access VBAタブコントロールQ
- 9. のMS Access + VBA - のOnClick()イベントエラー:
- 10. 問題:VBAのMS Access
- 11. (VBA)ForループとDLookup(MS ACCESS)
- 12. MS Access VBA:動的SQL
- 13. MS Access vba保存ボタンエラー3021
- 14. MS Access 2010 VBA SQLエラー3122
- 15. MS AccessのVBAのSQL - 別のテーブル
- 16. MS AccessのVBAクエリ複数のテーブル
- 17. MS Access VBA関数のフォームテキストボックスコントロールの結果
- 18. SQL NOT IN MS ACCESS/VBAのクエリ
- 19. スピードアップのMS Access VBAスクリプトがString
- 20. MS Access VBAコード内のSQLクエリ
- 21. データ型の不一致ヘルプMS Access VBA
- 22. MS Access VBA DSUM複数の基準
- 23. MS Access VBA質問を選択
- 24. VBAを使用したMS Access Link Table
- 25. Ms Access SQL VBAクエリエラーなし3075
- 26. MS Access 2016 VBA - テーブルフォームのVBAでTextBoxを変更します
- 27. MS Access VBAからExcel VBAを実行しています
- 28. MS-Accessの
- 29. MS Accessの&PHP
- 30. MS Accessのチャートプラグインモジュール
+1非常に印象的である:正しいです。マルチスレッドコンポーネントを作成(または既存のコンポーネントを使用)してVBAから呼び出すことはできますが、VBA自体はマルチスレッド化されていません。 – Joe