无法使用受保护工作表

时间:2017-02-13 12:10:01

标签: excel vba excel-vba

我有一张受密码保护的表格,有一些用户可以查看的未锁定单元格。

一旦用户更改了任何值,它就会自动通过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,因为所有单元格/范围都已解锁。

2 个答案:

答案 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