現在、Excelマクロツールの改修を行っています。
PJ毎のデータを集計するツールで、データが多い為処理に著しく時間がかかります。
軽量化による処理時間も限界なようなです。
せめて処理をバックグラウンドで走らせた状態で他の作業をしていたいのですが、マクロが動いている間、他のOfficeツール(WordやOutlook)もほとんど使えない状態になります。
繰り返しの多いループの部分では「DoEvents」で用いて、処理をシステムに戻すようにしているので、
固まってはいないのですが、WordやOutlookはほぼ反応しません。
VBA処理中に他のOfficeツールが使用できるように、VBAの記述で対応できないでしょうか?
自分の環境:
OS:Windows 7 Pro SP1
Office:Microsoft Office 2010 Plus
よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.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
No.1
- 回答日時:
> VBA処理中に他のOfficeツールが使用できるように、
物理的にマシンパワー足りなくで同時には実行できないんですから、Officeツール使用中には、マクロは停止しちゃっても支障ないんですよね?
Officeツール使用のために一時停止するとか、一定時間内にキー入力があったかどうかなんかを検知するとか。
アイドル時間を取得するのは、外部のプログラムを使うのが真っ当かも。
idletime.dll : Windows操作アイドル時間取得DLL - BitArts
http://bitarts.jp/software/idletime.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Outlook(アウトルック) outlookの送信エラーについて 1 2022/05/13 12:04
- Visual Basic(VBA) エクセルVBA コードが同じでもファイルによって処理速度が大きく変わるのはなぜ 5 2022/11/06 21:34
- Word(ワード) office 2021へ自分用のクイックアクセスとマクロをコピーしたい 2 2023/03/11 21:15
- その他(データベース) 業務用のデータベースサーバーの選び方について 4 2022/11/22 10:22
- その他(Microsoft Office) Office(Windows版,Word/Excel/PowerPoint等)にログインできません 4 2022/07/24 15:18
- その他(Microsoft Office) 学校卒業によりofficeライセンス(Microsoft 365)がなくなって使えなくなったので、新 3 2023/02/10 17:20
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Word(ワード) Wordで作った「表の罫線を部分的に削除したい」 4 2023/07/24 07:00
- その他(Microsoft Office) 学校を卒業したため、学校側から提供されていたofficeライセンスがなくなり、office365が使 3 2023/02/05 10:15
- その他(ブラウザ) Excel VBA seleniumのedge操作について 業務上、分からないことがございまして、先 1 2022/06/20 16:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
private subモジュールを他のモ...
-
SubとFunctionの使い分け方。(...
-
IF文に時間(何時から何時ま...
-
マクロで、次のコードへ行く前...
-
Word VBA。各マクロの間に待ち...
-
どう増強すべきか
-
特定のファイルを他のプロセス...
-
シートモジュールを複数作成す...
-
タイマーの使い方
-
【C#】Page_Loadさせない方法に...
-
VBAでBook読み込み時の非表示方...
-
vbaのエラー対応(実行時エラー...
-
エクセル VBAで複数セル選択時...
-
シグナル 6(SIGABRT)とは?
-
特定の名前のオートシェイプの...
-
ProgressBarを用いる場合、全体...
-
バッチ処理って何?
-
RaiseEventのメリット
-
【Vb.net】プリンタジョブの取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
IF文に時間(何時から何時ま...
-
private subモジュールを他のモ...
-
シグナル 6(SIGABRT)とは?
-
Functionで戻り値を複数返す方法
-
特定の名前のオートシェイプの...
-
ExcelのVBAで、選択したファイ...
-
マクロで、次のコードへ行く前...
-
どう増強すべきか
-
VBA 複数の行を高速で削除する...
-
Excel VBA セルの名前があるか...
-
特定のファイルを他のプロセス...
-
Word VBA。各マクロの間に待ち...
-
どうやってもFor文を抜けてしま...
-
【VBA】エラー処理で別プロシー...
-
エクセル VBAで複数セル選択時...
-
シェルスクリプトでファイル内...
-
【Vb.net】プリンタジョブの取得
-
vbaのエラー対応(実行時エラー...
-
VBAでBook読み込み時の非表示方...
おすすめ情報