![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
環境
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- その他(Microsoft Office) office2010とoffice365の共存でoffice365を優先で起草させたい 3 2023/01/24 10:47
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Excel(エクセル) Excel起動時にエラーダイアログが表示される 3 2022/07/28 19:52
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
特定のファイルを他のプロセスが編集中か確認する方法
Visual Basic(VBA)
-
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
「エクセルファイルが開いていたら開かない」としたい
Visual Basic(VBA)
-
-
4
VBAでCSVファイルが使用中かどうかの確認
Visual Basic(VBA)
-
5
エクセルマクロで、別のブックが開いているかを判定したいのですが。
その他(Microsoft Office)
-
6
VBでファイルが開かれているかどうかを確認したい
Visual Basic(VBA)
-
7
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
8
0バイトのテキストファイル
Visual Basic(VBA)
-
9
コマンドプロンプトで、指定したファイルが開いているかを判別をループする方法
その他(プログラミング・Web制作)
-
10
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
11
非表示になったエクセルは?
Excel(エクセル)
-
12
Excel VBA でファイルが開かれているか確認する
Excel(エクセル)
-
13
ファイルが開かれているかどうかの判断
Visual Basic(VBA)
-
14
VB.NETで起動したExcelの閉じ方について
Visual Basic(VBA)
-
15
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
16
VBSでExcelのオープン確認
Visual Basic(VBA)
-
17
既に開いているエクセルを閉じるには?
その他(Microsoft Office)
-
18
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
19
UserForm
Visual Basic(VBA)
-
20
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBでExcelが起動されているか知...
-
バッチスクリプト処理でエラー...
-
Linux環境変数設定(putenv?se...
-
CSHが使えない REDHAT
-
アプリケーションをインストー...
-
CPUとOS の違いは?
-
ソフトのインストール場所って...
-
DINPUT.DLLって何物
-
OS インストール場所確認
-
複数ファイルのシンボリックリンク
-
pkg-config のPKG_CONFIG_PATH...
-
aptでインストールしたプログラ...
-
exeファイルの実行結果をテキス...
-
バッチファイルでのスペースの入力
-
libintlの入手方法を教えてくだ...
-
Apace2のインストールでエラー
-
三菱エコキュート 今朝 C21 エ...
-
バッチファイル内置換
-
USBメモリ内のバッチで書き出す...
-
コマンドプロンプトの危険性を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチスクリプト処理でエラー...
-
バッチファイルで多重起動を防ぐ
-
VBでExcelが起動されているか知...
-
Linux環境変数設定(putenv?se...
-
CreateProcessでうまくexeファ...
-
コンソールアプリの起動結果待...
-
デーモンプロセスの起動について
-
「応答なし」の状態を監視する方法
-
Httpステータス500 InternalSer...
-
Open Office Org 急に起動しな...
-
MySQLへのDB::connectで、faile...
-
shell関数について
-
CPUの使用率が100%から戻りま...
-
_access関数が EACCES エラーと...
-
mysqldのCPU消費時間がどんどん...
-
仮想メモリ増加
-
PostgreSQLについて
-
ASP.NET 2.0(VB)からEXCELオブ...
-
XDRIVEのログインをSENDKEYで自...
-
telnetを抜けても、プロ...
おすすめ情報