Home > 即効テクニック > AccessVBA > Access設定 > Access本体のボタンやシステムメニューを無効化する

即効テクニック

Access設定

Access本体のボタンやシステムメニューを無効化する

(Access 97/)
● 概要 ●
Win32APIを使用して、Accessの本体右上の閉じる・最小化・最大化・元に戻すボタンと、システムメニュー(タイトルバー左端のアイコンをクリックした時に出るメニュー)を無効化する方法を説明します。

● 準備 ●
新規の標準モジュールを用意し、以下のプロシージャを記述します。

● サンプルコード ●
Option Compare Database
Option Explicit

'【引数説明】
'DeleteMenuの第2引数のを変えると、使えなくなる機能が変わります。
'6-閉じる       4-最大化    3-最小化
'2-サイズ変更   1-移動      0-元のサイズに戻す
'※ 注意
'   機能を使用不可にした時に数字がシフトするので、複数の機能を使用不可
'   にする場合は数字が大きい方からDeleteMenuして下さい
Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, _
                                             ByVal bRevert As Long _
                                           ) As Long

Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, _
                                          ByVal nPosition As Long, _
                                          ByVal wFlags As Long _
                                        ) As Long

Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long _
                                          ) As Long

● 実行プロシージャ●
Public Function DeleteAppMenu()

    'エラートラップ
    On Error GoTo Func_Err:

    '閉じるを使用不可にする
    DeleteMenu GetSystemMenu(Application.hWndAccessApp, False), 6, 1024

    'サイズ変更を使用不可にする
    DeleteMenu GetSystemMenu(Application.hWndAccessApp, False), 2, 1024

    '元のサイズに戻すを使用不可にする
    DeleteMenu GetSystemMenu(Application.hWndAccessApp, False), 0, 1024

    'メニューを再描画する
    DrawMenuBar(GetSystemMenu(Application.hWndAccessApp, False))

Func_Exit:
    Exit Function

Func_Err:
    MsgBox "Error Number : " & Err.Number & vbCrLf & Err.Description
    DoCmd.Quit acQuitSaveAll
    Resume Func_Exit:
End Function

● 詳細 ●
サンプルでは、閉じるボタン・元に戻すボタン、システムメニューの閉じるサイズ変更・元に戻す、の各機能を無効化します。GetSystemMunu関数によってAccessのシステムメニューのハンドルを取得し、DeleteMenuBar関数で実際に無効化、DrawMenuBar関数でシステムメニューを再描画し、実際の環境に反映させています。

この関数を使用することにより、ユーザーの操作を全てカスタムメニュー経由にさせる事などが出来るでしょう。

ちなみに、一度無効にしたボタン・機能もAccessを再起動すると復活しますので、常時各機能を無効化するのであれば、AutoExecマクロでこの関数を実行させる必要があります。