[[20240406001852]] 『VBAのチェンジイベントについて』(むぎ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『VBAのチェンジイベントについて』(むぎ)

保護されているシートのA1〜C100の範囲内のセルに変更があった場合に、
変更があったセルのみにロックをかけていきたいのですが、最初のシート保護が外れません。
(シート保護のパスワードはかかっていません)

シート1のモジュールに↓のコードを書いたのですが、何が誤っているか教えて頂けますか。
Private Sub Worksheet_Change(Byval Target As Range)

Sheet(1).Unprotect

Dim r As Range
Set r = Intersect(Target,Range("A1:C100"))
If r Is Nothing then
Exit Sub
End if

Range(Target.Address).Locked = True
sheet(1).Protect

End Sub

< 使用 Excel:Excel2016、使用 OS:Windows11 >


すみません最後のsが抜けてしまっていましたが、sheets(1)です。
(むぎ) 2024/04/06(土) 00:39:06

 コードを書いているシートは一番左に無いのかも知れません。
 Meキーワードを使ってこう書くのがよいのでは?

 Private Sub Worksheet_Change(ByVal Target As Range)
     Dim r As Range
     Set r = Intersect(Target, Range("A1:C100"))
     If r Is Nothing Then Exit Sub
     Me.Unprotect
     r.Locked = True  '(*)
     Me.Protect
 End Sub

 "A1:C100"以外にロックがオフになっているセルがあるかどうかに依存しますが、
 一応 r としてみました。適宜修正して下さい。
(xyz) 2024/04/06(土) 07:32:13

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.