
環境
winXP
Office2000 Excel
VB6.0 sp5
VBからExcelが起動されているか知りたいのです。
【状況1】
[a.xls]を起動している状態で下記を実行すると問題なく起動が確認できます。
【状況2】
[a.xls][b.xls]を起動してて[b.xls]が前面にある場合は下記を実行しても[a.xls]を探せません。
またウインドウを最大化にしていない場合も"Microsoft Excel -"という文言がいらない?せいか探せません。
[FindWindowEx]を使用すればできるのかと思いましたがイマイチ使い方が分からず困っています。
よろしくお願いします。
'sampleソース---------------------------------------------
hwnd = FindWindow("XLMAIN", "Microsoft Excel - a.xls")
If hwnd = 0 Then
Msgbox(" 0 は、Excel が起動していないことを示します。")
Else
Msgbox(" 起動中")
End If
'sampleソース---------------------------------------------
No.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
No.1
- 回答日時:
こんにちは。
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
とりあえずありがとうございました!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
特定のファイルを他のプロセスが編集中か確認する方法
Visual Basic(VBA)
-
「エクセルファイルが開いていたら開かない」としたい
Visual Basic(VBA)
-
バックグラウンドのプロセスのエクセルを閉じる方法
Visual Basic(VBA)
-
-
4
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
5
VBでファイルが開かれているかどうかを確認したい
Visual Basic(VBA)
-
6
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
7
VBAで他のプログラムが起動しているか調べる方法
Visual Basic(VBA)
-
8
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
-
9
ファイルやフォルダの有無、他のユーザーの使用状況を調べたい
Visual Basic(VBA)
-
10
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
11
ExcelVBA:すでに開かれているブックの判定方法
Visual Basic(VBA)
-
12
すでにファイルが開かれている時のエラー回避
Visual Basic(VBA)
-
13
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
14
ACCESS クエリで重複データを最新の1件だけ表示
Access(アクセス)
-
15
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA セル間のリンク修正につい...
-
【マクロ】並び替えの範囲が、...
-
VBAでCOPYを繰り返すと、処理が...
-
Vba Array関数について教えてく...
-
【VBA】 結合セルに複数画像と...
-
Excel VBA 選択範囲の罫線色の...
-
複数のExcelファイルをマージす...
-
【マクロ】開いているブックの...
-
改行文字「vbCrLf」とは
-
VBA 最終行の取得がうまくいか...
-
VB.net 文字列から日付型へ変更...
-
【マクロ】シートの変数へ入れ...
-
Excelのマクロについて教えてく...
-
vbs ブック共有を解除
-
【ExcelVBA】値を変更しながら...
-
vba textboxへの入力について教...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【ExcelVBA】5万行以上のデー...
-
Excelのマクロについて教えてく...
-
エクセルのVBAコードについて教...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチスクリプト処理でエラー...
-
バッチファイルで多重起動を防ぐ
-
VBでExcelが起動されているか知...
-
Linux環境変数設定(putenv?se...
-
コンソールアプリの起動結果待...
-
CreateProcessでコンソールアプ...
-
VB6 二重起動確実防止について
-
常駐し他のプロセスの起動を取...
-
プリンタの状態を知る方法
-
MySQLへのDB::connectで、faile...
-
ASP.NET 2.0(VB)からEXCELオブ...
-
CreateProcessでうまくexeファ...
-
外部プロセス起動時に発生する...
-
Open Office Org 急に起動しな...
-
CGIからのメール送信が重く・・・
-
system関数について
-
visual studioで作成したプログ...
-
telnetを抜けても、プロ...
-
「応答なし」の状態を監視する方法
-
バッチファイル内置換
おすすめ情報