2014年11月3日月曜日

[VBA] Office の閉じるボタンを無効にする

VBA から Microsoft Office (Word/Excel/Access)の閉じる[×]ボタンを無効にする方法です。Windows API を使います。
Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, _
    ByVal bRevert As Long) As Long

Private Declare Function EnableMenuItem Lib "user32" (ByVal hMenu As Long, _
    ByVal uIDEnableItem As Long, ByVal uEnable As Long) As Long

Const MF_GRAYED = &H1&
Const MF_BYCOMMAND = &H0&
Const SC_CLOSE = &HF060&

Sub CloseButtonEnable()
    Dim hWnd As Long
    Dim hMenu As Long
    Dim result As Long

    hWnd = Application.hWndAccessApp
    hMenu = GetSystemMenu(hWnd, 0)
    result = EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND Or MF_GRAYED)
End Sub
これを起動時に実行すれば閉じる[×]ボタンが無効になります。

■ 補足

ただし閉じる[×]ボタンを押してもファイルは閉じなくなりますが、Office のバージョンによって見た目が随分違います。
  • Office 2007: 見た目は変わらない。
  • Office 2010: 赤い×ボタンが若干暗い色に変わる
  • Office 2013: 見た目は変わらない。

これ以外にもある Office の「閉じる」操作は、
・Windows のタスクバーから、Officeのタスクを閉じる。
・メニューから Office を終了する。
・ショートカットキー [Ctrl] + [F4] で閉じる。
・Shift キーを押しながら起動すると、VBAマクロを無効にして起動できる。
・タスクマネージャ から、プロセスをKILL

■ 参考資料

GetSystemMenu
http://msdn.microsoft.com/ja-jp/library/cc364748.aspx

EnableMenuItem
http://msdn.microsoft.com/ja-jp/library/cc410786.aspx

アプリケーション ウィンドウの閉じるボタンおよび [ファイル] メニューの [終了] を無効にする方法
http://support.microsoft.com/kb/300688/ja