- ベストアンサー
VBでエクセルを起動し、プロセスの監視やエクセルシートの表示に関する問題
- VBの中で、データをエクセルシートに出力し、表示しているアプリが一定時間操作されない場合に「パスワード入力画面」が表示されてしまう問題があります。
- エクセルのプロセスを監視する方法や、エクセルシートを後面に表示させない方法について教えていただけないでしょうか。
- また、プロセスが動いている間はタイマーを止めて「パスワード入力画面」を表示させないようにする方法も知りたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
shell起動ではないんですね^^; すいませんでした。 えと・・・ 処理中のEXCELはWindowsのタスクにはあがってるのでしょうか?(固定の名前で) もしそうなら、現在タスクにあがってるかどうかの判定をする方法もありますね。 これもAPI関数でFindWindowかなんかでできたような気がします。
その他の回答 (1)
- SANDORAMAN
- ベストアンサー率25% (1/4)
もしVBからshell関数を使ってEXCELを起動してあげれば 以下のようにしてプロセス監視できますよ。 以下の2つを定義してください。 Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal PROCESS As Long, lpExitCode As Long) As Long と Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long それで、プログラム内で INST = Shell("EXCEL.EXEのPATH", 2) PROCESS = OpenProcess(1024 Or 1048576, True, INST) MODORITI = GetExitCodeProcess(PROCESS, ENDWORK) If ENDWORK = 259 Then 「EXCELは起動中です」 Else 「EXCELは終了しています」 End If 上の"EXCEL.EXEのPATH"の部分に「C:\Program Files\~EXCEL.EXE」を指定してください。 (shell関数のHELP参照) でENDWORKの値をチェックすれば 一応プロセス監視できます。 わかりづらくてすいません。 また、回答違いでしたらすいません。
お礼
どうもありがとうございます。 ここ数日この問題で情報を探しまくっているのですが、CreateObjectで作ったプロセスを監視するのは見つかりませんでした。(GetObjectで調べる方法はうまく動かなかったので) もう少し探してみて見つからなかったら、Shell関数で起動する方法も検討してみたいと思います。
お礼
どうもありがとうございました。(*^_^*) FindWindow関数でうまくいきました。 この関数でハンドルを取得できたので、後ろに隠れてしまったExcelシートを前面にだすこともできて大助かりです。(^O^)