A4:E50 のような範囲内のセルに値がある場合、VBA を使用して G1 を読み取り専用にするにはどうすればよいですか? 私の意図は、ユーザーが範囲 A4:E50 のいずれかのセルに入力するとすぐに、ドロップダウン リストである G1 のオプションを無効にすることです。ユーザーが範囲内のすべての値を削除した場合にのみ、G1 のオプションが使用可能になります。どうすればこれを達成できますか?
質問する
1058 次
1 に答える
1
これは私が思いついた簡単な解決策です...きれいではありませんが、うまくいきます:
まず、このマクロを 1 回だけ実行します。
Sub LockOneTime()
ActiveSheet.Cells.Locked = False
ActiveSheet.Range("G1").Locked = True
End Sub
次に、これをワークシート コードに入れます。
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.WorksheetFunction.CountA(Range("A1:E40")) > 0 Then
ActiveSheet.Protect contents:=True
Else
ActiveSheet.Protect contents:=False
End If
End Sub
それはあなたが達成しようとしているものを手に入れるための迅速で汚い方法です...
ロックされている他のセルに基づく編集:
ワークシート保護を使用して目標を達成できない場合は、次のコードをワークシートのコード モジュールに挿入してください (最初のLockOneTime
マクロはもう必要ありません)。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Intersect(Target, Range("G1")) Is Nothing) Then
If Application.WorksheetFunction.CountA(Range("A4:E50")) > 0 Then
Application.EnableEvents = False
MsgBox "You cannot change the value in cell G1"
Application.Undo
Application.EnableEvents = True
End If
End If
End Sub
これにより cellG1
に変更が発生することはありませんが、その欠点は、多くのセルを変更し、 G1 がその1つであると仮定すると、変更が発生しないことです...つまり、 G1 がセルの 1 つが変更されると、どのセルも変更できなくなります。
これで問題ないことを願っています。そうでない場合、コードはもう少し複雑で複雑になります....
于 2013-07-08T14:31:30.613 に答える