- ベストアンサー
VBでExcelが起動されているか知りたい
- VBからExcelの起動状態を確認したい場合、FindWindowEx関数を使用します。
- 状況1では、特定のExcelファイルが起動している場合に正しく動作します。
- 状況2では、前面に表示されているExcelファイル名を指定する必要がありますが、ウィンドウの最大化によって起動判定が失敗する可能性があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
補足しますね。 単に Excel が開いているかどうか...を調べるなら、API を使う必要はありません。 Dim xlApp As Object On Error Resume Next Set xlApp = GetObject(, "Excel.Application") If xlApp Is Nothing Then MsgBox "開いてない" Else MsgBox "開いてる" End If Set xlApp = Nothing On Error GoTo 0 みたいな感じで。ご質問の a.xls が開かれているか? という意味なら、 > Excel のプロセスが2つとか、3つあった場合はどうします? この点、Excel が異なるプロセスで複数存在する場合は、プロセス毎に調べなく てはなりません。これはかなり面倒なので、代替案として 「排他アクセスできなければファイルは使用中=開いている」 というロジックでどうですか? Private Sub Command1_Click() If IsOpend("C:\Sample\a.xls") > 0 Then MsgBox "開いている", vbCritical Else MsgBox "開いてないか、ファイルが無い", vbInformation End If End Sub ' // ファイルが使用中か調べる Public Function IsOpend(ByVal FilePath As String) As Long ' 排他アクセスできなければファイルは使用中 If Dir$(FilePath) <> "" Then Dim n As Integer n = FreeFile() On Error Resume Next Open FilePath For Binary Access Read Lock Read Write As #n Close #n If Err Then IsOpend = 1 ' 既に開いている Else IsOpend = 0 ' 開いていない End If On Error GoTo 0 Else IsOpend = -1 ' ファイルが見つからない End If End Function
その他の回答 (1)
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。KenKen_SP です。 XLMAIN --> XLDESK --> EXCEL7 の順で探します。このウインドウ構成は SPY++ を 使うとすぐわかりますよ。 Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String _ ) As Long Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" ( _ ByVal hWnd1 As Long, _ ByVal hWnd2 As Long, _ ByVal lpsz1 As String, _ ByVal lpsz2 As String _ ) As Long Sub Sample() Dim hWnd As Long hWnd = FindWindow("XLMAIN", vbNullString) If hWnd > 0 Then hWnd = FindWindowEx(hWnd, 0&, "XLDESK", vbNullString) ' lpsz2 === a.xls とか hWnd = FindWindowEx(hWnd, 0&, "EXCEL7", "a.xls") If hWnd > 0 Then MsgBox "(・∀・)ミッケ! Handle:=" & CStr(hWnd) Else MsgBox "(・∀・)いないみたい" End If Else MsgBox "(・∀・)Excel が起動してないみたい" End If End Sub でも、この方法では探しきれないと思います。Excel のプロセスが2つとか、 3つあった場合はどうします?
お礼
この方法も大変参考になりました。 ホントありがとうございました^^
補足
ありがとうございます! 希望通りの回答です!! >でも、この方法では探しきれないと思います。Excel のプロセスが2つとか、 3つあった場合はどうします? た 確かに…。探せないですね。(汗 もう少し自分で考えてみます…。 もし何か良い知恵がございましたらご教授願いますm(_ _)m とりあえずありがとうございました!!
お礼
度々ありがとうございます! この発想の転換に気づきませんでした!! 本当にお世話になりました。 ありがとうございました。