Excel VBA質問箱 IV

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

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


20532 / 76732 ←次へ | 前へ→

【61615】Re:新しいウインドを開くのウインドウを閉じるときイベント
回答  neptune  - 09/5/21(木) 22:31 -

引用なし
パスワード
   ▼ON さん:
このサンプルは理解の助けになるでしょうか?

GetAllWindowsClassName
を実行すると、Sheet1にExcelアプリケーションの子ウィンドウのクラス名と、
そのウィンドウのTitleバーのText列挙されます。
これで複数のBookがあっても、各Bookのクラス名とtitleが取得できます。

Private Declare Function EnumChildWindows Lib "user32.dll" _
            (ByVal hWndParent As Long, _
             ByVal lpEnumFunc As Long, _
             lParam As Long) As Long

Private Declare Function FindWindow Lib "user32" _
            Alias "FindWindowA" _
            (ByVal lpClassName As String, _
            ByVal lpWindowName As String) As Long
    
Private Declare Function FindWindowEx Lib "user32" _
            Alias "FindWindowExA" _
            (ByVal hWnd1 As Long, _
            ByVal hWnd2 As Long, _
            ByVal lpsz1 As String, _
            ByVal lpsz2 As String) As Long
    
Private Declare Function GetClassName Lib "user32.dll" _
            Alias "GetClassNameA" _
            (ByVal hWnd As Long, _
            ByVal lpClassName As String, _
            ByVal nMaxCount As Long) As Long
    
Private Declare Function GetWindowText Lib "user32.dll" _
            Alias "GetWindowTextA" _
            (ByVal hWnd As Long, _
            ByVal lpString As String, _
            ByVal nMaxCount As Long) As Long
                
Private Const cExcelClassName As String = "XLMAIN"

Private Sub GetAllWindowsClassName()
Dim hWnd As Long
Dim sBuf As String * 512
Dim sTitle As String
Dim lret As Long

  hWnd = FindWindow(cExcelClassName, Application.Caption)
  lret = GetWindowText(hWnd, sBuf, Len(sBuf))
  sTitle = Left(sBuf, InStr(sBuf, vbNullChar) - 1)
  With Worksheets("Sheet1")
    .Range("A1").Value = "ClassName"
    .Range("B1").Value = "Caption"
    .Range("A2").Value = cExcelClassName
    .Range("B2").Value = sTitle
  End With
  
  Call EnumChildWindows(hWnd, AddressOf EnumChildWindowsProc, 0&)
  
End Sub

'これはどこかにあった奴を保存してたので改造して使ってます。
Private Function EnumChildWindowsProc(ByVal hChild As Long, _
                 lParam As Long) As Long
  Dim sBuff As String * 128
  Dim sBuff2 As String * 516
  Dim ret As Long
  Dim sClassName As String
  Dim sTitle As String
  Dim lCount As Long
  
  lCount = GetLoastRow + 1
  'クラス名取得
  ret = GetClassName(hChild, sBuff, Len(sBuff))
  sClassName = Left(sBuff, InStr(sBuff, vbNullChar) - 1)
  
  ret = GetWindowText(hChild, sBuff2, Len(sBuff2))
  sTitle = Left(sBuff2, InStr(sBuff2, vbNullChar) - 1)
  
  Worksheets("Sheet1").Range("A" & CStr(lCount)).Value = sClassName
  Worksheets("Sheet1").Range("B" & CStr(lCount)).Value = sTitle
  
  EnumChildWindowsProc = True
End Function

Private Function GetLoastRow() As Long
  Dim ret As Long
  
  ret = Worksheets("Sheet1").Range("A" & CStr(Application.Rows.Count)).End(xlUp).Row
  GetLoastRow = ret
End Function

以下APIの解説
ht tp://msdn.microsoft.com/ja-jp/library/cc364600.aspx
ht tp://msdn.microsoft.com/ja-jp/library/cc410802.aspx
ht tp://msdn.microsoft.com/ja-jp/library/cc410835.aspx
ht tp://msdn.microsoft.com/ja-jp/library/cc410853.aspx
ht tp://msdn.microsoft.com/ja-jp/library/cc364815.aspx

>ちょっと気になっているのが
??activewindow.Application.Caption
?での返り値は
>ブックのウインドウが最大化されていないとき:Microsoft Excel
>ブックのウインドウが最大化されているとき :Microsoft Excel - hoge.xls
なんですが、ExcelはMDIアプリケーションなのでその子ウィンドウ
(この場合Book)が最大化された時、親ウィンドウのタイトルバー(一番上の
閉じるボタンなどがある所)に
Microsoft Excel - hoge.xls
となるのは
そういうスタイル指定は出来なかったと思うので、MDIWindowの仕様のような
気がします。・・・・自信なし

4 hits

【61498】新しいウインドを開くのウインドウを閉じるときイベント ON 09/5/13(水) 17:57 質問
【61504】Re:新しいウインドを開くのウインドウを閉... n 09/5/13(水) 22:40 発言
【61507】Re:新しいウインドを開くのウインドウを閉... yoshi 09/5/14(木) 2:26 お礼
【61515】Re:新しいウインドを開くのウインドウを閉... neptune 09/5/14(木) 10:19 発言
【61604】Re:新しいウインドを開くのウインドウを閉... ON 09/5/21(木) 16:18 お礼
【61615】Re:新しいウインドを開くのウインドウを閉... neptune 09/5/21(木) 22:31 回答
【61619】Re:新しいウインドを開くのウインドウを閉... n 09/5/22(金) 1:37 発言
【61624】Re:新しいウインドを開くのウインドウを閉... yoshi 09/5/22(金) 11:59 回答
【61690】Re:新しいウインドを開くのウインドウを閉... ON 09/5/27(水) 18:44 お礼
【61723】Re:新しいウインドを開くのウインドウを閉... ON 09/5/29(金) 21:15 お礼
【61737】Re:新しいウインドを開くのウインドウを閉... yoshi 09/5/30(土) 16:19 回答
【61804】Re:新しいウインドを開くのウインドウを閉... ON 09/6/5(金) 16:17 質問
【61808】Re:新しいウインドを開くのウインドウを閉... yoshi 09/6/5(金) 18:17 回答
【61809】Re:新しいウインドを開くのウインドウを閉... ON 09/6/5(金) 19:10 質問
【61817】Re:新しいウインドを開くのウインドウを閉... yoshi 09/6/6(土) 16:54 回答
【61930】Re:新しいウインドを開くのウインドウを閉... ON 09/6/12(金) 16:36 お礼
【61931】Re:新しいウインドを開くのウインドウを閉... ON 09/6/12(金) 16:37 発言
【61932】Re:新しいウインドを開くのウインドウを閉... ON 09/6/12(金) 16:39 発言

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