アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在、Excelマクロツールの改修を行っています。
PJ毎のデータを集計するツールで、データが多い為処理に著しく時間がかかります。
軽量化による処理時間も限界なようなです。

せめて処理をバックグラウンドで走らせた状態で他の作業をしていたいのですが、マクロが動いている間、他のOfficeツール(WordやOutlook)もほとんど使えない状態になります。

繰り返しの多いループの部分では「DoEvents」で用いて、処理をシステムに戻すようにしているので、
固まってはいないのですが、WordやOutlookはほぼ反応しません。

VBA処理中に他のOfficeツールが使用できるように、VBAの記述で対応できないでしょうか?

自分の環境:
 OS:Windows 7 Pro SP1
Office:Microsoft Office 2010 Plus

よろしくお願いいたします。

A 回答 (2件)

下記にプロセスの優先度を下げる方法が載っていますが、リンクが切れている様なので、さわりだけ載せます。


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
    • good
    • 0

> VBA処理中に他のOfficeツールが使用できるように、



物理的にマシンパワー足りなくで同時には実行できないんですから、Officeツール使用中には、マクロは停止しちゃっても支障ないんですよね?

Officeツール使用のために一時停止するとか、一定時間内にキー入力があったかどうかなんかを検知するとか。
アイドル時間を取得するのは、外部のプログラムを使うのが真っ当かも。

idletime.dll : Windows操作アイドル時間取得DLL - BitArts
http://bitarts.jp/software/idletime.html
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!