2013-03-20 71 views
1

我很好奇是否可以将Excel工作表的保护状态传递给该工作表的单元格。 例如将Excel工作表的保护状态传递给单元格

  • Sheet1中被锁定以进行编辑...细胞A1进行编程,说“锁定”
  • Sheet1中解锁...细胞A1会说“解锁”

工作表上的按钮将用于打开和关闭工作表保护。

使用workbook_open事件打开时,我的工作表将被锁定。

这是用于表格,我不希望公式在使用时被全部取消,但可能需要完全访问。它更多地提醒用户他们处于“解锁”模式,因此要格外小心。

使用VBA已成定局吗?

我是VBA小白,但不介意使用代码作为这个

任何想法的解决方案或建议,欢迎

回答

1

你可以使用代码在工作表Sheet1上的ActiveX按钮,操作也很简便

Const strPAss = "test" 

Private Sub CommandButton1_Click() 
If ActiveSheet.ProtectContents Then 
ActiveSheet.Unprotect strPAss 
[a1].Value = "unlocked" 
Else 
[a1].Value = "locked" 
ActiveSheet.Protect strPAss 
End If 
End Sub 
+0

谢谢,brettdj - 这可以满足我的要求。使用activex控件对使用它们的VBA代码有任何影响吗? – JohnM 2013-03-20 22:24:58

1

工作表的代码模块将这个,这将放置一个提醒在状态栏(这可以避免需要锁定/解锁工作表,以便将状态写入单元格A1)。

把它放在Sheet1代码模块中。每次激活sheet1时宏都会执行。

Private Sub Worksheet_Activate() 
If ActiveSheet.ProtectContents then 
    Application.StatusBar = "This sheet is protected" 
Else: 
    Application.StatusBar = "This sheet is unprotected" 
End If 
End Sub 

Private Sub Worksheet_Deactivate() 
    Application.StatusBar = False 
End Sub 

保护/解除保护,你可以添加这一个插入>模块工作表。然后附加这些宏以分离命令按钮,或者从Developer> Macros功能区运行。

Const myPassword as String = "password" '<-- replace "password" with your password 

Sub Sht1Protect() 
    Sheet1.Protect myPassword 
End Sub 

Sub Sht1Unprotect() 
    Sheet1.Unprotect myPassword 
End Sub 

为了保证片始终受到保护,当你关闭文件,工作簿的代码模块

Private Sub Workbook_Close() 
    Sht1Protect 
End Sub 

您可能需要额外的处理,以控制该文件是否被保存/未插入此保存等

+0

感谢大卫 - 一些noob问题...我把这个到sheet1的代码模块或去插入>模块?我已经把它放在了VBA编辑器中,并通过了它。它可以作为一个宏链接到一个按钮,或者我是否使用Excel内置的保护工作表切换?我可以在完成后自动更新到受保护/未受保护的位置吗? – JohnM 2013-03-20 03:02:25

+0

嗨@JohnM,看我的修订。 – 2013-03-20 04:21:15

+0

感谢大卫,虽然这工作,对我的实施,我宁愿能够格式化单元格,使其状态更明显的用户。 – JohnM 2013-03-20 22:23:00

相关问题