アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAを始めたばかりです。
言葉等に間違いがあると思うのですがお許しください。

指定したセル(B3)に入力があればB3のみにロックをかけて、そうでなければ書き込み可能にしたいです。また、シート内にB3以外にもロックをかけてあるセルがあります。

下記の'1のところでエラーが出てしまい困っています。
どうしたらよいのかお教えください。
よろしくお願いいたします。

Sub test()

Dim w As Worksheet
Dim r As Range
Set w = Worksheets("sheet1")
Set r = w.Range("B3")

If r = "" Then
w.Unprotect

ElseIf r <> "" Then
r.Locked = True '1

End If
End Sub

質問者からの補足コメント

  • シートを開いたらマクロが動くようにしようと思っています。

      補足日時:2017/11/08 19:01
  • 遅くなり申し訳ありません。
    よい確認をしてくださいまして、ありがとうございます。
    書き忘れていました。
    シートが開くと自動で動くようにしたいと思っています。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/11/08 19:05

A 回答 (3件)

対象のシートがアクティブになった時ならば


-----------------------------------------------------------------------------------------
Private Sub Worksheet_Activate()

ActiveSheet.Unprotect
If Range("B3").Value = "" Then
Range("B3").Locked = False
Else
Range("B3").Locked = True
End If
ActiveSheet.Protect

End Sub
-----------------------------------------------------------------------------------------
「Excel VBA 選択したセルのみ保護」の回答画像3
    • good
    • 0
この回答へのお礼

ありがとうございました。
できました。
オブジェクトへの貼り付け方まで教えてくださって感謝しています。

お礼日時:2017/11/09 08:42

手動でロックならば以下のような感じでいかがでしょうか?


-----------------------------------------------------------------------------------------
Sub test()

With Sheets("Sheet1")
.Unprotect
If .Range("B3").Value = "" Then
.Range("B3").Locked = False
Else
.Range("B3").Locked = True
End If
.Protect
End With

End Sub
-----------------------------------------------------------------------------------------
エラーの原因ですがロック状態を変更するときにシートの保護を一時的に解除しておかないといけないからだと思います。

自動でロックならば対象のシートへ(下図参照)
-----------------------------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address(False, False) = "B3" Then
ActiveSheet.Unprotect
If Target.Value = "" Then
Target.Locked = False
Else
Target.Locked = True
End If
ActiveSheet.Protect
End If

End Sub
-----------------------------------------------------------------------------------------
「Excel VBA 選択したセルのみ保護」の回答画像2
    • good
    • 0

一応確認ですが B3セルに入力されたら自動でロックではなく手動でロックするわけですよね?

この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A