0
0

More than 1 year has passed since last update.

《VBA|Access》編集ロックボタンの設置・データのコピーは可能にする

Last updated at Posted at 2023-07-26

概要

業務で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

結果

トグルボタンは下記のように変化します。

《編集ロック中》

ロック01.png
ロック状態でもレコードの情報をコピーすることは可能ですが、上書きや削除はできません。

《編集ロック解除中》

ロック02.png
トグルボタンクリックでロック解除するとレコードの入力が可能になります。

Me.[オブジェクト].Locked = Falseでロック解除、Trueでロックなので、新規レコードボタンのクリック時にはロック解除状態で新規レコードを開くようにすると良いでしょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0