- 締切済み
Excelマクロ処理の裏でWordを使いたい
現在、Excelマクロツールの改修を行っています。 PJ毎のデータを集計するツールで、データが多い為処理に著しく時間がかかります。 軽量化による処理時間も限界なようなです。 せめて処理をバックグラウンドで走らせた状態で他の作業をしていたいのですが、マクロが動いている間、他のOfficeツール(WordやOutlook)もほとんど使えない状態になります。 繰り返しの多いループの部分では「DoEvents」で用いて、処理をシステムに戻すようにしているので、 固まってはいないのですが、WordやOutlookはほぼ反応しません。 VBA処理中に他のOfficeツールが使用できるように、VBAの記述で対応できないでしょうか? 自分の環境: OS:Windows 7 Pro SP1 Office:Microsoft Office 2010 Plus よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- mitarashi
- ベストアンサー率59% (574/965)
下記にプロセスの優先度を下げる方法が載っていますが、リンクが切れている様なので、さわりだけ載せます。 http://okwave.jp/qa/q4185781.html Accessで時間のかかるクエリをVBAからまとめて実行する時に使ってみましたが、裏で一応他の作業が出来ましたので、効果があるのかもしれません。(WindowsXP Office2000~2003の頃の話です) Private Declare Function GetCurrentProcess Lib "kernel32" () As Long Private Declare Function SetPriorityClass Lib "kernel32" (ByVal hProcess As Long, ByVal dwPriorityClass As Long) As Long Const NORMAL_PRIORITY_CLASS As Long = &H20 Const IDLE_PRIORITY_CLASS As Long = &H40 '下に行くに従って優先度が上がる '0x00000040 (IDLE_PRIORITY_CLASS) アイドルクラス '0x00004000 (BELOW_NORMAL_PRIORITY_CLASS) '0x00000020 (NORMAL_PRIORITY_CLASS) 通常クラス '0x00008000 (ABOVE_NORMAL_PRIORITY_CLASS) '0x00000080 (HIGH_PRIORITY_CLASS) 優先クラス '0x00000100 (REALTIME_PRIORITY_CLASS) リアルタイムクラス Sub test() Call SetPriorityClass(GetCurrentProcess, IDLE_PRIORITY_CLASS) '時間のかかる処理 Call SetPriorityClass(GetCurrentProcess, NORMAL_PRIORITY_CLASS) End Sub
- neKo_deux
- ベストアンサー率44% (5541/12319)
> VBA処理中に他のOfficeツールが使用できるように、 物理的にマシンパワー足りなくで同時には実行できないんですから、Officeツール使用中には、マクロは停止しちゃっても支障ないんですよね? Officeツール使用のために一時停止するとか、一定時間内にキー入力があったかどうかなんかを検知するとか。 アイドル時間を取得するのは、外部のプログラムを使うのが真っ当かも。 idletime.dll : Windows操作アイドル時間取得DLL - BitArts http://bitarts.jp/software/idletime.html