2012-11-08 167 views
1

我一直在寻找一个代码锁定在表中的所有细胞,但之一,我发现这个代码:锁定/解锁细胞VBA

Worksheets("SW").Range("D2").Locked = False 
Worksheets("SW").Protect UserInterfaceOnly:=True 

它确实工作得很好,直到我救了它,并关闭/打开该文件再次,然后我运行的任何宏。

我想这是因为在这片我有不同的宏,还我,当一个小区改变运行宏:

Private Sub Worksheet_Change(ByVal Target As Range) 

你有任何想法如何使它工作吗?

还有一件事,这个工作簿将被共享,所以我不知道这会影响宏。

对不起,也许我太模棱两可了。

是的我想防止他人改变细胞的价值。

我想只有一个单元格可以改变,所以其他所有单元格都随着宏而改变。再次

感谢您的帮助

PS:是的艾哈迈德·木塔瓦,我想是不可能的昌板材即使该项目被保存,关闭和打开。

如果您需要更多信息,请告诉我,我会尽量做得更具体。

+1

我觉得你忘了你的一半解释;) – Jook

+1

目前还不清楚你想完成什么。即使在保存关闭/重新打开 – Ahmad

回答

0

您的文件是否有任何其他操作,而不是您想要实现的锁定解锁代码的宏?

如果是这样,我建议你在vba中有一个代码。否则,您可以简单地锁定工作表以防止用户在没有代码的情况下随时更改某些内容。

你认为这可能比[code] [1]更好吗?

[http://office.microsoft.com/en-us/excel-help/lock-or-unlock-specific-areas-of-a-protected-worksheet-HA010096837.aspx] [1]

出于好奇:以任何机会,你有不知道在哪里以及如何触发这个代码块的问题吗?

编辑代码: - 您的评论不清楚,无可非议我相信你想使用一个宏。 假设您想要保护/锁定或取消保护Sheet1,请尝试以下操作。 : -

添加在打开工作簿时这些代码的ThisWorkbook: -

Private Sub Workbook_Open() 
    Dim shtSheet As Worksheet 
    Dim strPassword As String 

    strPassword = "stack" 
    Set shtSheet = Worksheets("Sheet1") 
    shtSheet.Protect Password:=strPassword, UserInterfaceOnly:=True 
End Sub 

下一页添加你的模块在下面。并在完成宏的运行后调用它。

Sub ProtectSheet() 
    Dim shtSheet As Worksheet 
    Dim strPassword As String 

    strPassword = "stack" 
    Set shtSheet = Worksheets("Sheet1") 
    shtSheet.Protect strPassword 
End Sub 
+0

之后,是否还想阻止人们更改表单?问题是,我运行了可更改锁定单元格值的宏,因此我需要一些代码将其排除。我想也许用我的上层代码可以工作,直到我关闭并再次打开。 – themolestones

+0

不,这不是我的问题,问题在于当我锁定工作表时,我的宏不运行,只是第一次运行,当工作簿关闭并打开时出现问题。对不起,也许我的英文不太清楚,但我希望我能更好地解释它,对不起,谢谢 – themolestones

+0

对不起,我无法理解你的问题。 Perhas的标题是误导性的。让我们稍微改变一下这段代码:您可以在UserInterfaceOnly为true的情况下将第一个取消保护代码段放入Workbook打开事件中。 然后将Protect sub添加到主模块的末尾。当你的宏完成时,表格将被完全保护。 我编辑了代码。 – bonCodigo