環境
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!ショッピング
-
VBでファイルが開かれているかどうかを確認したい
Visual Basic(VBA)
-
-
4
エクセルマクロで、別のブックが開いているかを判定したいのですが。
その他(Microsoft Office)
-
5
「エクセルファイルが開いていたら開かない」としたい
Visual Basic(VBA)
-
6
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
7
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
8
ファイルやフォルダの有無、他のユーザーの使用状況を調べたい
Visual Basic(VBA)
-
9
VBAでCSVファイルが使用中かどうかの確認
Visual Basic(VBA)
-
10
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
-
11
起動中のアプリ、ソフトの取得
Visual Basic(VBA)
-
12
ファイルが開かれているかどうかの判断
Visual Basic(VBA)
-
13
0バイトのテキストファイル
Visual Basic(VBA)
-
14
VBで実行中のEXEファイルの情報を取得したい
Visual Basic(VBA)
-
15
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
16
Excel VBA でファイルが開かれているか確認する
Excel(エクセル)
-
17
非表示になったエクセルは?
Excel(エクセル)
-
18
AccessからExcelのファイルを起動する
その他(データベース)
-
19
VB.NETで起動したExcelの閉じ方について
Visual Basic(VBA)
-
20
すでにファイルが開かれている時のエラー回避
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コンソールアプリの起動結果待...
-
バッチスクリプト処理でエラー...
-
「応答なし」の状態を監視する方法
-
VBでExcelが起動されているか知...
-
XDRIVEのログインをSENDKEYで自...
-
apache2.2が起動せず困っていま...
-
Open Office Org 急に起動しな...
-
デーモンプロセスの起動について
-
ソフトのインストール場所って...
-
CSHが使えない REDHAT
-
aptでインストールしたプログラ...
-
Postfixでmailコマンドを使用し...
-
CPUとOS の違いは?
-
誰かにサーバにあるデータを消...
-
VBAのRegExpで後方一致/不一致...
-
バッチファイルでのスペースの入力
-
mac os 10.6の入ったMac mini ...
-
大塚商会で新しくシステム、ス...
-
エクセルVBA 実行時エラー 5029...
-
Macで元から入っているRubyは消...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチスクリプト処理でエラー...
-
バッチファイルで多重起動を防ぐ
-
VBでExcelが起動されているか知...
-
Linux環境変数設定(putenv?se...
-
コンソールアプリの起動結果待...
-
MySQLへのDB::connectで、faile...
-
VB6 二重起動確実防止について
-
「応答なし」の状態を監視する方法
-
_access関数が EACCES エラーと...
-
shell関数について
-
コンソールアプリケーションの...
-
仮想メモリ増加
-
CreateProcessでコンソールアプ...
-
Open Office Org 急に起動しな...
-
CreateProcessでうまくexeファ...
-
apache2.2が起動せず困っていま...
-
外部プログラムの起動と監視
-
CPUの使用率が100%から戻りま...
-
PostgreSQLについて
-
XDRIVEのログインをSENDKEYで自...
おすすめ情報