金曜日、18月2022
  3 返信
  9.7K訪問
化学製品の分析試験用のデータの傾向を示すスプレッドシートを設定しています。 データの転記がレビュー担当者によって検証されたら、データの各行をロックしたいと考えています。 VBA で次のコードを使用すると、単一行をロックできます。

プライベートサブワークシート_Change(ByValターゲットを範囲として)
Range("X3") = "いいえ" の場合
Range("B3:W3").Locked = False
ElseIf Range("X3") = "はい" then
Range("B3:W3").Locked = True
終了する場合
End Subの

列 X には、「はい」と「いいえ」の XNUMX つのオプションを含むドロップダウン リストが含まれています。 過去のデータに意図しない変更が加えられないように、レビュー担当者がこの列で [はい] を選択すると、シートに追加されるデータの各行がロックされるようにしたいと考えています。 これは、各行の about コードを無限に繰り返さなくても可能ですか?
受け入れられた回答
こんにちは、ステファニーさん

以下のコードをお試しください。さらにご質問がございましたら、お気軽にお問い合わせください。

アマンダ

Private Sub Worksheet_Change(ByVal Target As Range)
Dim xPassword As String
Dim xRgAddress As String
Dim xLockRgAddress As String
Dim Row As Integer

xPassword = "123456" 'Please replace 123456 with the password that protects the spreadsheet.
On Error Resume Next

If (Target.Column <> 24) Then
Exit Sub
End If

Row = Target.Row


If Target = "Yes" Then
If ActiveSheet.Range("B" & Row & ":W" & Row).Locked = False Then
ActiveSheet.Unprotect (xPassword)
ActiveSheet.Range("B" & Row & ":W" & Row).Locked = True
ActiveSheet.Protect Password:=xPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True
End If
ElseIf Target = "No" Then
If ActiveSheet.Range("B" & Row & ":W" & Row).Locked = True Then
ActiveSheet.Unprotect (xPassword)
ActiveSheet.Range("B" & Row & ":W" & Row).Locked = False
ActiveSheet.Protect Password:=xPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True
End If
End If


End Sub
また、スプレッドシートが保護されているときに、これらのセルのステータスをロック解除からロックに変更できるようにする必要もあります。そうしないと、この機能は役に立ちません。
受け入れられた回答
こんにちは、ステファニーさん

以下のコードをお試しください。さらにご質問がございましたら、お気軽にお問い合わせください。

アマンダ

Private Sub Worksheet_Change(ByVal Target As Range)
Dim xPassword As String
Dim xRgAddress As String
Dim xLockRgAddress As String
Dim Row As Integer

xPassword = "123456" 'Please replace 123456 with the password that protects the spreadsheet.
On Error Resume Next

If (Target.Column <> 24) Then
Exit Sub
End If

Row = Target.Row


If Target = "Yes" Then
If ActiveSheet.Range("B" & Row & ":W" & Row).Locked = False Then
ActiveSheet.Unprotect (xPassword)
ActiveSheet.Range("B" & Row & ":W" & Row).Locked = True
ActiveSheet.Protect Password:=xPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True
End If
ElseIf Target = "No" Then
If ActiveSheet.Range("B" & Row & ":W" & Row).Locked = True Then
ActiveSheet.Unprotect (xPassword)
ActiveSheet.Range("B" & Row & ":W" & Row).Locked = False
ActiveSheet.Protect Password:=xPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True
End If
End If


End Sub
どうもありがとうございます! そのコードは完璧に機能しました。 私はまだ VBA に慣れていないので、助けてくれて本当に感謝しています。 :)
  • ページ:
  • 1
この投稿に対する返信はまだありません。