0

A4:E50 のような範囲内のセルに値がある場合、VBA を使用して G1 を読み取り専用にするにはどうすればよいですか? 私の意図は、ユーザーが範囲 A4:E50 のいずれかのセルに入力するとすぐに、ドロップダウン リストである G1 のオプションを無効にすることです。ユーザーが範囲内のすべての値を削除した場合にのみ、G1 のオプションが使用可能になります。どうすればこれを達成できますか?

4

1 に答える 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 に答える