HOME>TOP>API

Excelの閉じる[X]ボタンを非表示にするには?


キーワード>>API ・GetWindowLong・SetWindowLong・DrawMenuBar 

 

Point:ユーザーフォームの閉じるボタンを消したい。

'APIの宣言
'ウィンドウハンドルを取得する関数

Public Declare Function FindWindow Lib "user32" _
       Alias "FindWindowA" (ByVal lpClassName As String _
                    , ByVal lpWindowName As String) As Long

'ウィンドウに関する情報を返す関数
Public Declare Function GetWindowLong Lib "user32" _
             Alias "GetWindowLongA" (ByVal hWnd As Long _
                               , ByVal nIndex As Long) As Long

'ウィンドウの属性を変更する関数
Public Declare Function SetWindowLong Lib "user32" _
                  Alias "SetWindowLongA" (ByVal hWnd As Long _
        , ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

'メニューバーを描画する関数
Public Declare Function DrawMenuBar Lib "user32" _
                                           (ByVal hWnd As Long) As Long


'スタイルを取得する定数
Public Const GWL_STYLE As Long = -16&

'ウィンドウスタイル
Public Const WS_SYSMENU As Long = &H80000

'非表示用のコード
Sub BoxHide()
Dim hWnd As Long
Dim lngWstyle As Long

'Excelのハンドル
   hWnd = FindWindow("ThunderXFrame", Application.Caption)

   lngWstyle = GetWindowLong(hWnd, GWL_STYLE)

'閉じるボタンの消去
   SetWindowLong hWnd, GWL_STYLE, lngWstyle _
        And (Not WS_SYSMENU) 
'メニュー再描画
  DrawMenuBar hWnd

End Sub

'表示用コード
Sub BoxShow()
Dim hWnd As Long
Dim lngWstyle As Long

'Excelのハンドル
   hWnd = FindWindow("XLMAIN", Application.Caption)

'閉じるボタンの表示
   lngWstyle = GetWindowLong(hWnd, GWL_STYLE)

    SetWindowLong hWnd, GWL_STYLE, lngWstyle _
             Or  WS_SYSMENU

'メニュー表示し直し
  DrawMenuBar hWnd

End Sub


掲載サンプルコードの使用に関して、直接・間接
を問わず生じた一切の損害について如何なる責任も負いません。