スタイル

編集中の行以外のセルにはロックをかける

エクセルを共有している場合、自分が編集しようと思っているセル以外を書き換えてしまうリスクがあります。
特に外部データベースにデータを保存している場合は、Ctrl+Zを使った復元ができない場合もあるので問題です。

このため、VBAアセットでは、セルをダブルクリックした編集中の行以外のセルにはロックをかけて、誤って書き換えてしまわないようにしています。

まず、Worksheet_Activateプロシージャに、すべてのセルのロックを設定するコードを追加します。

'ワークシートがアクティブになった場合に処理を行う
Private Sub Worksheet_Activate()
'シートの保護を解除する
Me.Unprotect

'テーブル全体の塗りつぶしを解除し、ロックを設定します。
'「電話メモ」テーブルを対象
With Range("電話メモ")
    '編集行表示を解除する
    With .Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With

    'セルをロックする
    .Locked = True
End With

'シートの保護を設定する
Me.Protect
End Sub

つぎに、Worksheet_BeforeDoubleClickプロシージャに、編集する行のセルのロックを解除するコードを追加します。

'ワークシートがダブルクリックされた場合に処理を行う
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim r As Long, s As Long

'ターゲットのテーブル行・列番号を計算する
r = Target.Row - Range("電話メモ").Row + 1          'テーブル行番号

'シートの保護を解除する
Me.Unprotect

'編集行のロックを解除する
'他の行を誤って修正してしまわないようにするため、すべての行のセルをロックし、
'編集している行のセルのみをロック解除します。

'「電話メモ」テーブルを対象
With Range("電話メモ")
    'すべての行をロックする
    .Locked = True
    
    '編集行表示を解除する
    With .Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    
    'ターゲット行を対象
    With .Rows(r)
        'ロックを解除する
        .Locked = False
    
        '1列目のロックを設定する
        .Columns(1).Locked = True
    
        '編集行表示を設定する
        With .Interior
            .ThemeColor = xlThemeColorAccent2
            .TintAndShade = 0.8
        End With
    End With
End With

'シートの保護を設定する
Me.Protect

End Sub

コメント

タイトルとURLをコピーしました