VBA-锁定单元仅在某些单元中起作用,而在其他单元中不起作用

时间:2019-02-06 19:21:37

标签: excel vba

该项目肯定正在测试我在VBA中的限制。我还有一个问题。在此工作簿中,我有一个名为“添加项目”的按钮,该按钮带有另一个工作表“项目模板”,并使用它创建一个名为“添加项目”的新工作表。创建此工作表时,我试图添加一些特定的单元格锁定。这个想法是,用户可以更改某些区域,但不能更改具有公式或由其他单元格中的条目自动填充的区域。

问题是,当我添加代码时,某些代码会适当锁定,一个特定的单元格会弹出一个询问密码的弹出窗口(当它应该像其他代码一样被锁定时),而有些则允许您仍然编辑它们包含在锁定的代码中。

我已经检查了单元格格式,并且选中了用于锁定的框。我也转到了“允许用户编辑范围”并从那里删除了所有内容(尽管这些范围不在其中)。我已经改变了范围的顺序,以为也许即使我将结束范围设置为不同的单元格,它们也会以某种方式相互覆盖。

Public Sub Open_AddProjectSheet()
Application.ScreenUpdating = False
ActiveWorkbook.Unprotect Password:="Password"
Worksheets("ProjTemplate").Visible = True

If WorksheetExists("AddProject") = False Then
 GetTSResourceInfo
 GetTSProjectID
 ActiveWorkbook.Unprotect Password:="Password"
Worksheets("ProjTemplate").Copy After:=Worksheets("ProjTemplate")
ActiveSheet.Name = "AddProject"
 Worksheets("ProjTemplate").Visible = xlSheetVeryHidden
Sheets("AddProject").Activate
ActiveSheet.Unprotect Password:="Password"
ActiveSheet.Cells.Locked = False
ActiveSheet.Range("E5,C6,L2,L6").Locked = True
ActiveSheet.Range("E11:E190").Locked = True
ActiveSheet.Range("G11:H190").Locked = True
ActiveSheet.Range("K2:K6").Locked = True
ActiveSheet.Range("L11:R190").Locked = True
ActiveSheet.Range("L3:L5").Locked = False
ActiveSheet.Protect Password:="Password",UserInterFaceOnly:=True,Contents:=True
Else
answer = MsgBox("'AddProject' sheet already active. Would you like to pick up where you left?  WARNING: Selecting 'No' will close the existing sheet and open a new one, any progress will not be saved.", vbYesNo)

    If answer = 6 Then
        Worksheets("AddProject").Activate
        Else
            *Same code as above*
    End If

End If
Worksheets("ProjTemplate").Visible = xlSheetVeryHidden
ActiveWorkbook.Protect Password:="Password"
Application.ScreenUpdating = True
 End Sub

运行此代码时,E5,C6,K2-K6,L2,L11-R190全部正确锁定。 L6弹出一个弹出窗口,要求输入密码来更改此单元格。所有其他范围E11-E190,G11-H190都可以编辑,即使它们应该被锁定。

我非常感激任何想法。谢谢!

1 个答案:

答案 0 :(得分:0)

因此,即使以前没有用,我们还是回过头来尝试更改允许用户编辑范围。再次擦除所有这些,单元锁定开始起作用。我不会质疑为什么它起作用了,而不是上次尝试不起作用,只是高兴它起作用了!话虽如此,速度不同仍然是一个问题。