• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBでエクセルを起動し、プロセスを監視したい)

VBでエクセルを起動し、プロセスの監視やエクセルシートの表示に関する問題

このQ&Aのポイント
  • VBの中で、データをエクセルシートに出力し、表示しているアプリが一定時間操作されない場合に「パスワード入力画面」が表示されてしまう問題があります。
  • エクセルのプロセスを監視する方法や、エクセルシートを後面に表示させない方法について教えていただけないでしょうか。
  • また、プロセスが動いている間はタイマーを止めて「パスワード入力画面」を表示させないようにする方法も知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

shell起動ではないんですね^^; すいませんでした。 えと・・・ 処理中のEXCELはWindowsのタスクにはあがってるのでしょうか?(固定の名前で) もしそうなら、現在タスクにあがってるかどうかの判定をする方法もありますね。 これもAPI関数でFindWindowかなんかでできたような気がします。

lily02
質問者

お礼

どうもありがとうございました。(*^_^*) FindWindow関数でうまくいきました。 この関数でハンドルを取得できたので、後ろに隠れてしまったExcelシートを前面にだすこともできて大助かりです。(^O^)

その他の回答 (1)

回答No.1

もし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の値をチェックすれば 一応プロセス監視できます。 わかりづらくてすいません。 また、回答違いでしたらすいません。

lily02
質問者

お礼

どうもありがとうございます。 ここ数日この問題で情報を探しまくっているのですが、CreateObjectで作ったプロセスを監視するのは見つかりませんでした。(GetObjectで調べる方法はうまく動かなかったので) もう少し探してみて見つからなかったら、Shell関数で起動する方法も検討してみたいと思います。

関連するQ&A

専門家に質問してみよう