概要
業務でAccessファイルを運用していて、不特定多数の社員がそのファイルを操作する場合があると思いますが、管理者以外がレコードを誤って削除したり変更したりしないように、必要なとき以外は『編集ロック』をしていた方が良いでしょう。
しかし、編集ロック中でも『データのコピーだけは行いたい』という要望もあるかと思います。
フォームに編集ロックボタンを設置し、ボタンクリックで編集ロックと解除を行うVBAコードと、ロック中でもレコードのコピーを可能とする方法を解説します。
フォームへのボタン配置
フォームをデザインビューにして「フォームデザイン」タブからトグルボタンを選択してフォームのヘッダー部分に配置します。
フォームを開いたときには詳細部分は編集ロック状態にしますので、ボタンのプロパティで通常の背景色等はロック状態のものを設定し、クリック時の設定にはロック解除状態のものを設定しましょう。
VBAコード
ボタンの書式の設定ができたら、プロパティの選択の種類で「フォーム」を選択し、「イベント」タブで上から2番めの「読み込み時」の「…」からコードビルダーを選択します。
「Form_Load」という関数ができているので、下記のようにコードを記述します。
'フォームを開いた時の処理:編集ロック
'詳細は全部ロックし、ヘッダー(メニュー)部分は選択的にロックする
Private Sub Form_Load()
Dim C As Control
'エラー処理、これが無いとうまく動かない
'実行前のロック状況に関係なくエラー無視して処理する
On Error Resume Next
'詳細部分は一律編集ロックする、すでにロックしてあれば無視する
For Each C In Me.Section(acDetail).Controls
C.Locked = True
Next C
'ヘッダーの下記2つはロック解除
Me.cmd_search.Enabled = True
Me.cmd_new.Enabled = True
End Sub
エディターの保存ボタンでコードを保存したら、次はまたフォームのデザインビューに戻り、編集ロックボタンを選択した状態でプロパティのイベントタブ「クリック時」の「…」から「コードビルダー」を選択してください。
ボタンクリックの関数ができているので、下記のコードを記述します。
'ボタンクリックで「編集ロック」を解除し詳細部分のデータの変更・上書きを可能にする
Private Sub cmd_lock_Click()
Dim C As Control
'エラー処理、これが無いとうまく動かない
'実行前のロック状況に関係なくエラー無視して処理する
On Error Resume Next
'トグルボタンが押されていれば実行:編集ロック解除処理
If Me.cmd_lock.Value Then
MsgBox "編集ロックを解除します"
Me.cmd_lock.Caption = "編集ロック解除中"
For Each C In Me.Section(acDetail).Controls
C.Locked = False
Next C
'トグルボタンが押された状態から再度押されれば実行:編集ロック処理
Else
MsgBox "編集ロックモードにします"
Me.cmd_lock.Caption = "編集ロック中"
For Each C In Me.Section(acDetail).Controls
C.Locked = True
Next C
'ヘッダーの下記2つはロック解除
Me.cmd_search.Enabled = True
Me.cmd_new.Enabled = True
End If
End Sub
結果
トグルボタンは下記のように変化します。
《編集ロック中》
ロック状態でもレコードの情報をコピーすることは可能ですが、上書きや削除はできません。
《編集ロック解除中》
トグルボタンクリックでロック解除するとレコードの入力が可能になります。
Me.[オブジェクト].Locked = False
でロック解除、True
でロックなので、新規レコードボタンのクリック時にはロック解除状態で新規レコードを開くようにすると良いでしょう。