我有一张受密码保护的表格,有一些用户可以查看的未锁定单元格。
一旦用户更改了任何值,它就会自动通过vba代码更改其他未锁定的单元格。如果工作表已解锁,则此方法可以正常工作,但如果工作表受到保护则不行。
代码示例:
在Workbook_Open()中,我将UserInterfaceOnly属性设置为TRUE:
Sheets("Sheet Name").Protect Password:="123456", UserInterFaceOnly:=True, Contents:=True
工作表代码:如果date.01更改
,则将date.01值设置为date.02单元格Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("date.01")) Is Nothing Then
Worksheets("Sheet Name").Range("date.02") = Target
End If
End Sub
单元格“date.01”和“date.02”已解锁。
为什么我不能更新它们?
修改
SelectionChange事件是更改单元格值的最佳选择吗?并且可以像这样完成任务:
Worksheets("Sheet Name").Range("date.02") = Target
我可以看到当原始单元格重新获得焦点时,更改是适用的。
我真正想要做的是在用户更改任何单元格的任何时候,在不同工作表中为一组单元格赋予相同的值。
解决。
我很糟糕,我正在使用
Worksheet_SelectionChange
而不是
Worksheet_Change
我还必须使用它来防止任何错误。
Application.EnableEvents = False
<CODE>
Application.EnableEvents = True
无需使用UserInterfaceOnly,因为所有单元格/范围都已解锁。
答案 0 :(得分:0)
你可以简单地检查它与保护有什么关系。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("date.01")) Is Nothing Then
Sheets("Sheet Name").unProtect Password:="123456"
`Worksheets("Sheet Name").Range("date.02") = Target`
`Sheets("Sheet Name").Protect Password:="123456", UserInterFaceOnly:=True`
End if
End Sub
您是否通过VBA应用验证
答案 1 :(得分:0)
要使用的事件方法是Worksheet.Change Event
https://msdn.microsoft.com/en-us/library/office/ff839775.aspx
代码就像:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("date.01")) Is Nothing Then
Application.EnableEvents = False
Worksheets("Sheet1").Range("date.01") = Target
Worksheets("Sheet2").Range("date.02") = Target
Worksheets("Sheet3").Range("date.03") = Target
Worksheets("Sheet4").Range("date.04") = Target
Worksheets("Sheet5").Range("date.05") = Target
Application.EnableEvents = True
End If
End Sub