Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


44280 / 76735 ←次へ | 前へ→

【37476】Re:特定の名前のブックが開かれているかどう...
発言  Blue  - 06/5/9(火) 11:08 -

引用なし
パスワード
   FindWindowExで試しにつくってみました。
ただし、結構条件を限定していますので、Excelのバージョンによっては使えないかもしれません。

Option Explicit

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
  (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, _
   ByVal lpszClass As String, ByVal lpszWindow As String) As Long
' GetWindowTextWを使用(戻り値でLeft$したいから)
Private Declare Function GetWindowText _
  Lib "user32" Alias "GetWindowTextW" _
  (ByVal hWnd As Long, ByVal lpString As Long, _
   ByVal nMaxCount As Long) As Long

Sub test()
  Const strBookPath As String = "D:\TESTエリア\testarea\sample.xls"
  If IsExistBook(strBookPath) Then
    MsgBox strBookPath & "は開いています。"
  Else
    MsgBox strBookPath & "は開いていません。"
  End If
End Sub

' 該当のBookを開いているかどうかを調査する関数(FindWindowEx使用)
' 動作確認 : Windows Xp Pro Sp2, Excel 2002 Sp3
Private Function IsExistBook(ByVal strBookPath As String) As Boolean
  Dim hXLMainWnd As Long
  Dim hXLDeskWnd As Long
  Dim strTitle  As String
  Dim lngLen   As Long
  Dim strBookName As String
  
  ' ブック名の取得(ファイルタイトル)
  strBookName = Dir(strBookPath)
  
  Do
    ' EXCELウィンドウの取得(クラス名 "XLMAIN" で列挙)
    hXLMainWnd = FindWindowEx(0&, hXLMainWnd, "XLMAIN", vbNullString)
    ' EXCELウィンドウはもうないので終わり
    If hXLMainWnd = 0 Then Exit Do
    ' EXCELのウィンドウタイトルの取得
    strTitle = String(256, vbNullChar)
    lngLen = GetWindowText(hXLMainWnd, StrPtr(strTitle), 256)
    If lngLen > 0 Then
      strTitle = Left$(strTitle, lngLen)
      ' Bookを最大化していない場合
      ' (ウィンドウタイトル "Microsoft Excel" で該当とする)
      If strTitle = "Microsoft Excel" Then
        ' MDIのウィンドウ(?)を取得(クラス名 "XLDESK" で取得)
        hXLDeskWnd = FindWindowEx(hXLMainWnd, 0&, _
                     "XLDESK", vbNullString)
        If hXLDeskWnd <> 0 Then
          ' 該当のBookが開いているかどうか(Book名で検索する)
          If FindWindowEx(hXLDeskWnd, 0&, _
                  vbNullString, strBookName) <> 0 Then
            IsExistBook = True
            Exit Function
          End If
        End If
      ' Bookを最大化している場合
      ' (ウィンドウタイトル "Microsoft Excel - Book名" で該当とする)
      ElseIf strTitle Like "Microsoft Excel - " & strBookName Then
        IsExistBook = True
        Exit Function
      End If
    End If
  Loop
End Function

1 hits

【37460】特定の名前のブックが開かれているかどう... 黄金比 06/5/8(月) 19:02 質問
【37467】Re:特定の名前のブックが開かれているかど... ネット徘徊者 06/5/8(月) 20:16 発言
【37470】Re:特定の名前のブックが開かれているかど... ichinose 06/5/8(月) 23:26 発言
【37471】Re:特定の名前のブックが開かれているかど... Kein 06/5/9(火) 0:30 回答
【37472】Re:特定の名前のブックが開かれているかど... Blue 06/5/9(火) 0:44 発言
【37473】Re:特定の名前のブックが開かれているかど... Kein 06/5/9(火) 1:37 発言
【37476】Re:特定の名前のブックが開かれているかど... Blue 06/5/9(火) 11:08 発言

44280 / 76735 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free