Accessテクニックのホームへ戻る

■ 起動時の設定をバイパスする[Shift]キーを無効にする (2000,2002,2003,2007)

 

起動時の設定でデータベースウィンドウを表示しないようにしてショートカットキー(F11)を無効にしても、エンドユーザーが[Shift]キーを押してデータベースをダブルクリックすると、起動時の設定が無効(バイパス)になります。(つまり、データベースウィンドウが表示されるため、テーブルなどが書き換えられる可能性があります。)

 

データベースを保全するには、エンドユーザーが[Shift]キーを押しても起動時の設定が無効にならないような仕掛けが必要になります。Accessは、この機能をVBA(Visual Basic for Application)で組み込みできるようにAllowBypassKeyプロパティをサポートしています。AllowBypassKeyプロパティにTrueを設定すると[Shift]キーが有効になりますが、Falseを設定すると[Shift]キーが無効になります。AllowBypassKeyプロパティのデフォルトは、Trueに設定されています。

 

ここでは、データベース起動時に[Shift]キーを押しても、起動時の設定がバイパスされないデータベースを作成する手順を解説します。

 

1. Access起動

Accessを起動したら作業フォルダworkに新規データベースW003.mdbを作成します。

 

2. フォーム作成

データベースウィンドウのオブジェクトから[フォーム]をクリックして、右側の新規オブジェクトのショートカットから[デザインビューでフォームを作成する]をダブルクリックします。

 

3. ラベル作成

ツールボックスからラベルのアイコンをクリックしたら、フォームにドラッグして「このフォームは、起動時の設定で自動的に開かれるように設定されています。 シフトキーを押しながらデータベースをダブルクリックしても起動時の設定が無効になりません。(つまり、起動時の設定を無効にすることができません)」のメッセージを入力します。

 

フォームにラベルを作成して標題を入力

 

4. フォームのOnLoadイベント登録

フォーム内の未使用領域をダブルクリックして、フォームのプロパティウィンドウを表示します。未使用領域をダブルクリックする代わりに、ツールバーからプロパティのアイコンをクリックする方法もあります。フォームのプロパティウィンドウから[イベント]タブをクリックしたら読み込み時のイベントをダブルクリックします。プロパティウィンドウに[イベントプロシージャ]が表示されたら、右端に表示されているボタンをクリックします。

 

 

フォームのプロパティウィンドウから読み込み時のイベント登録

 

Visual Basic Editor(VBE)にフォームのOnLoadイベントが自動生成されたら、次のコードを入力します。

 

Private Sub Form_Load()

  Dim varPropertyValue As Variant

 

  varPropertyValue = Right(CurrentProject.FullName, 3) = "mdb"

  fsUpdateAllowBypassKey varPropertyValue

End Sub

 

 

 

5. フォームを保存

VBEのツールバーから表示(Access)のアイコンをクリックしてAccessのウィンドウに切り替えます。Accessのツールバーから上書き保存のアイコンをクリックしたら、「frm自動オープンバイパス不可」の名称で保存します。フォームを閉じるボタンをクリックしてフォームを閉じます。

 

 

6. モジュールをインポート

Windowsのエクスプローラを起動したら、[003.mdb]をダブルクリックして開きます。003.mdbのデータベースウィンドウが表示されたら、オブジェクトから[モジュール]をクリックします。モジュールbasAllowBypassKeyをドラッグしたら、W003.mdbのデータベースウィンドウにドロップします。これで、モジュールbasAllowBypassKeyがインポートされます。

 

モジュールbasAllowBypassKeyをドラッグ&ドロップでインポート

 

 

7. 起動時の設定

Access[ツール]メニューから[起動時の設定]を選択します。「起動時の設定」ダイアログが表示されたら、[ショートカットキーを有効にする]チェックボックスをクリックしてチェックを外します。フォーム/ページの表示のドロップダウンリストから[frm自動オープンバイパス不可]を選択します。[データベースウィンドウの表示]のチェックボックスをクリックしてチェックを外します。最後に、[OK]ボタンをクリックしてダイアログを閉じます。

 

「起動時の設定」ダイアログから各種オプションを設定

 

 

8. Access 2002-2003ファイル形式に変換

Access[ツール]メニューから[データベースユーティリティ][データベース変換][Access 2002-2003ファイル形式]を選択します。「変換先データベース」のダイアログが表示されたら、保存先のドロップダウンリストから作業フォルダ[work]を選択します。ファイル名のテキストボックスに「W003New.mdb」を入力したら[保存]ボタンをクリックします。「このファイルをAccess 2002-2003ファイル形式に変換すると、新しいファイルはAccess 2000ユーザーやAccess 97ユーザーと共有できなくなります。」のメッセージが表示されたら[OK]ボタンをクリックします。

 

Note

MDEファイルを作成する

 

Access 2002/2003MDEファイルを作成するには、Access 2002-2003のファイル形式でMDBを作成する必要があります。Access 2002/2003のデフォルトの設定では、Access 2000のファイル形式でMDBを作成します。デフォルトのファイル形式を変更するには、Access[ツール]メニューから[オプション]を選択します。「オプション」のダイアログが表示されたら、[詳細]タブをクリックして既定のファイル形式のドロップダウンリストからファイル形式を選択します。

 

 

9. Accessを終了

Access[ファイル]メニューから[終了]を選択してAccessを終了します。

 

10. MDEファイル作成

Windowsのエクスプローラから作業フォルダworkのファイルを表示したら、[Shift]キーを押しながら[W003New.mdb]をダブルクリックして開きます。Accessのメインウィンドウが表示されたら、[ツール]メニューから[データベースユーティリティ][MDEファイルの作成]を選択します。「MDEファイルの作成」ダイアログが表示されたら、保存先のドロップダウンリストから作業フォルダ[work]を選択して[保存]ボタンをクリックします。ファイル名のテキストボックスに「W003New.mde」が表示されていますので、デフォルト値を使用します。MDEファイルが作成されたら、Access[ファイル]メニューから[終了]を選択してAccessを終了します。

 

 

11. MDEファイルをダブルクリックして開く

Windowsのエクスプローラから作業フォルダworkのファイルを表示したら、[W003New.mde]をダブルクリックして開きします。起動時の設定が作動してAccessのメインウィンドウにフォームが自動的に表示されます。Accessメインウィンドウの閉じるボタンをクリックして、Accessを終了します。

 

 

 

12. MDEファイルを[Shift]キーを押しながらダブルクリック

Windowsのエクスプローラから[Shift]キーを押しながら[W003New.mde]をダブルクリックします。本来、[Shift]キーを押しながらダブルクリックすると、起動時の設定が無効になってデータベースウィンドウが表示されます。ところが、このMDEファイルは[Shift]キーが無効(AllowBypassKey=False)になるように設定されていますので、起動時の設定がバイパスされません。

 

Note

[Shift]キーが有効になるときの対処

 

[Shift]キーを押しながらW003New.mdeをダブルクリックしたとき、起動時の設定がバイパスされるような場合は、次の手順で起動時の設定を再設定してください。

 

1. Access[ツール]メニューから[起動時の設定]を選択します。

 

2.起動時の設定」ダイアログが表示されたら設定の内容を再確認して[OK]ボタンをクリックします。

 

1.    Access[ファイル]メニューから[終了]を選択してAccessを終了します。

 

これで、[Shift]キーを押しながらファイルをダブルクリックしても、起動時の設定がバイパスされません。

 

 

Note

エンドユーザーからデータベースを保全する

 

エンドユーザーが、データベースのテーブルを直接開いて書き換えることができないようにするには、起動時の設定でデータベースウィンドウを表示しないようにします。また、ショートカットキー(F11)を無効にしたり[Shift]キーなどが動作しないようにします。

 

さらに、Accessのメインウィンドウに表示されているメニューバー、ツールバーなどもカスタマイズして表示しないようにする必要があります。

 

 

Caution

自分自身がロックアウトされないように

 

VBAAllowBypassKeyプロパティを無条件にFalseに設定すると、自分自身がロックアウトされてデータベースの保守ができなくなります。AllowBypassKeyプロパティを更新するときは、必ずデータベースの外から与えるパラメータを基に行ってください。ここで解説したサンプルでは、データベースの拡張子(.mdb/.mde)を基にプロパティを更新しています。

 

 

 

●解説

 

起動時の設定をバイパスする[Shift]キーを無効にするには、DatabaseオブジェクトのAllowBypassKeyプロパティをFalseに設定します。DatabaseオブジェクトにAllowBypassKeyプロパティを追加するには、CreatePropertyメソッドでPropertyのオブジェクトを生成してPropertiesコレクションのAppendメソッドで追加します。

 

CreateProperty(name, type, value, DDL)

 

CreateProperyメソッドの引数nameには、”AllowBypassKey”を指定します。引数typeには、ブール型のデータ型dbBooleanを指定します。引数valueには、バリアント型のTrue/Falseを指定します。引数DDLには、Trueを指定します。

 

varValue = False

Set db = CurrentDb

Set prp = db.CreateProperty("AllowBypassKey", dbBoolean, varValue, True)

db.Properties.Append prp

 

DatabaseオブジェクトにAllowBypassKeyプロパティがすでに追加されている状態で、PropertiesコレクションのCreateProperty()メソッドを実行するとエラーになります。この場合、PropertiesコレクションのDeleteメソッドでAllowBypassKeyプロパティを削除してから追加します。

 

PropertiesコレクションにAllowBypassKeyプロパティが登録されていない状態で、Deleteメソッドを実行するとエラーになりますので、On Error Resume Nextステートメントでエラーを無視して処理を続行させます。On Error GoTo 0ステートメントは、On Error Resume Nextを無効にします。

 

Set db = CurrentDb

On Error Resume Next

db.Properties.Delete "AllowBypassKey"

On Error GoTo 0

Set prp = db.CreateProperty("AllowBypassKey", dbBoolean, varValue, True)

db.Properties.Append prp

 

AllowBypassKeyプロパティの書き換えは、フォームのOnLoadイベントで行っています。データベースが起動されると、起動時の設定で指定したフォームfrm自動オープンバイパス不可が開かれます。

 

フォームがロードされると、フォームのOnLoadイベントに制御が渡ります。このイベントでは、サブプロシージャfsUpdateAllowBypassKeyを呼び出してAllowBypassKeyプロパティを更新しています。fsUpdateAllowBypassKeyの引数には、AllowBypassKeyプロパティの値(True/False)をバリアント型で指定します。変数varPropertyValueには、データベースの拡張子が”mdb”のときTrue”mde”のときFalseが格納されます。

 

 

Private Sub Form_Load()

  Dim varPropertyValue As Variant

 

  varPropertyValue = Right(CurrentProject.FullName, 3) = "mdb"

  fsUpdateAllowBypassKey varPropertyValue

End Sub

 

サブプロシージャfsUpdateAllowBypassKeyは、モジュールbasAllowBypassKeyに登録されています。

 

Public Sub fsUpdateAllowBypassKey(varValue As Variant)

  Dim db As DAO.Database

  Dim prp As DAO.Property

 

  Set db = CurrentDb

  On Error Resume Next

  db.Properties.Delete "AllowBypassKey"

  On Error GoTo 0

  Set prp = db.CreateProperty("AllowBypassKey", dbBoolean, varValue, True)

  db.Properties.Append prp

End Sub

 

ダウンロード (003.lzh)