マイクロソフトアクセス(以下Access)というデータベースを使っていて、テーブルから、フォームウィザードで作成した入力画面などだと、ちょっとした人的ミスで、データを書き換えてしまったり、消してしまったりする場合があります。
そこで、ちょっとしたロック機能や、ワンクッション入れる操作を入れることで入力ミス防止につながります。
編集許可ボタンを設置する
一つの人的ミスの防止策として、フォーム自体の「更新の許可」を「いいえ」にしておき、編集するときだけ、編集許可ボタンを押して更新を可能にする方法がある。
これならば、間違って別のキーを押してもデータは更新されたり消されたりするリスクが減ります。
(1)フォームをデザインモードで開いたら、左上の点をクリックして選択
(2)プロパティシートの「更新の許可」を「いいえ」に変更
上記の手動設定も今回は、VBAにした方が簡単なのでVBAに自動切り替えにしました。
※(1)(2)の設定はしなくてもOKです。
フォームをデザインモードにして、ボタンの「更新許可」を設置します。
プロパティシートの「クリック時」にて、コードビルダーを起動して下記のように設定します。
※サブフォームなどがある場合は、コメントアウトしている部分を使ってください。
Private Sub 更新許可_Click()
'モードコマンドをクリック時、以下の動作を行う
DoCmd.RunCommand acCmdRefresh 'オブジェクトの再描画
If 更新許可.Caption = "読取専用モード" Then
FrmUnlock Me 'フォームのロックを解除
' Me.Sub_frm.Form.AllowAdditions = True 'サブフォーム「Sub_frm」の追加 = 許可
' Me.Sub_frm.Form.AllowDeletions = True 'サブフォーム「Sub_frm」の削除 = 許可
' Me.Sub_frm.Form.AllowEdits = True 'サブフォーム「Sub_frm」の編集 = 許可
'
Else
FrmLock Me 'フォームをロックする
' Me.Sub_frm.Form.AllowAdditions = False 'サブフォーム「Sub_frm」の追加 = 禁止
' Me.Sub_frm.Form.AllowDeletions = False 'サブフォーム「Sub_frm」の削除 = 禁止
' Me.Sub_frm.Form.AllowEdits = False 'サブフォーム「Sub_frm」の編集 = 禁止
'
End If
End Sub
その他、フォームのプロパティシートから、
●読み込み時
●レコード移動時
の場所から、コードビルダーを起動してVBAの編集エリアに行きます。
上記●2つのVBAと、●2つのSubプログラムを追加してください。
●読み込み時
Private Sub Form_Load()
FrmLock Me '開くときのモードを指定 フォームをロックする
End Sub
●レコード移動時
Private Sub Form_Current()
FrmLock Me 'フォームをロックする
End Sub
●Subプログラム(フォーム編集ロック時)
Public Sub FrmLock(frm As Form)
'フォームのロック
frm.AllowAdditions = False '追加 = 禁止
frm.AllowDeletions = False '削除 = 禁止
frm.AllowEdits = False '編集 = 禁止
frm.更新許可.Caption = "読取専用モード" '現在のモードを表示
frm.更新許可.BackStyle = 0 '参照モードの場合ラベルの背景を透明にする
End Sub
●Subプログラム(編集許可時)
Public Sub FrmUnlock(frm As Form)
'フォームのアンロック
frm.AllowAdditions = True '追加 = 許可
frm.AllowDeletions = True '削除 = 許可
frm.AllowEdits = True '編集 = 許可
frm.更新許可.Caption = "編集モード" '現在のモードを表示
End Sub
この設定をすることで、「編集モード」ボタンを押さない限り、編集はできなくなり、人的ミスが減ります。また、レコードを移動する時も自動で編集ロックがかかるようになっています。
他にも方法ある誤入力対策
Accessは、市販のマニュアルには無いテクニックがあり過ぎて本当に探すのに大変な面がありますが、方法は1つだけではないので、自分の経験で蓄積していけば良いかと考えます。
今回の様に、フォームにロックをかけて編集できなくなくするという方法もありますが、複数人でデータベースを共有して使用する場合は、閲覧するフォーム自体に直接テーブルのデータを使わないケースの方が多いです。
つまり、入力画面と検索画面が分かれており、一旦入力されたデータを見る場合は、検索画面でしか見れないという事になり、検索画面では、直接テーブルのデータを表示している訳ではないので、更新するには、更新ボタンをクリックしない限り、保存されないという仕組みになります。
まだまだ、人的ミスを防ぐ方法はありますが、随時ブログにてしていきたいと思います。