
環境
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)
-
「エクセルファイルが開いていたら開かない」としたい
Visual Basic(VBA)
-
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
-
4
バックグラウンドのプロセスのエクセルを閉じる方法
Visual Basic(VBA)
-
5
VBでファイルが開かれているかどうかを確認したい
Visual Basic(VBA)
-
6
ExcelVBA:すでに開かれているブックの判定方法
Visual Basic(VBA)
-
7
VBAでCSVファイルが使用中かどうかの確認
Visual Basic(VBA)
-
8
すでにファイルが開かれている時のエラー回避
Visual Basic(VBA)
-
9
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
10
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
-
11
パラメータが少なすぎます。1を指定して下さい。""
Excel(エクセル)
-
12
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
13
エクセルマクロで、別のブックが開いているかを判定したいのですが。
その他(Microsoft Office)
-
14
VBAで他のプログラムが起動しているか調べる方法
Visual Basic(VBA)
-
15
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
16
ファイルが開かれているかどうかの判断
Visual Basic(VBA)
-
17
ファイルやフォルダの有無、他のユーザーの使用状況を調べたい
Visual Basic(VBA)
-
18
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
19
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
20
MS Accessでフォームの「開く時」と「読込み時」のイベントの違い
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
_access関数が EACCES エラーと...
-
CGIからのメール送信が重く・・・
-
バッチファイルで多重起動を防ぐ
-
バッチスクリプト処理でエラー...
-
プリンタの状態を知る方法
-
MySQLへのDB::connectで、faile...
-
DebianのApache(掲示板)CGIエ...
-
メーリングリスト宛てのメール...
-
redhatのインストールが途中で...
-
exeファイルの実行結果をテキス...
-
CygwinをインストールしたけどX...
-
アプリケーションをインストー...
-
Linux Red HatをノートPCに...
-
illustratorを日本語仕様にする...
-
コマンドプロンプトの危険性を...
-
アプリケーションをインストー...
-
対話式インストールによるノー...
-
linuxのフォルダと配置について
-
apacheのアクセスログを整理
-
Xserverを停止したいが、gdmが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチスクリプト処理でエラー...
-
バッチファイルで多重起動を防ぐ
-
VBでExcelが起動されているか知...
-
コンソールアプリの起動結果待...
-
Linux環境変数設定(putenv?se...
-
プリンタの状態を知る方法
-
Open Office Org 急に起動しな...
-
「応答なし」の状態を監視する方法
-
PC起動後に・・・
-
Javaのイベントリスナー機能の応用
-
Apache2が起動しません
-
system関数について
-
パソコン のデータ 特にPDFを消...
-
_access関数が EACCES エラーと...
-
Web Developerが正常にインスト...
-
PostgreSQLについて
-
CreateProcessでコンソールアプ...
-
ラズパイ3でsocket接続できない。
-
OLEサーバコンポーネントを作っ...
-
MySQLへのDB::connectで、faile...
おすすめ情報