将Excel工作表的保护状态传递给单元格

时间:2013-03-20 02:14:45

标签: excel excel-vba protection worksheet vba

我很好奇是否可以将excel工作表的保护状态传递给该工作表的单元格。 e.g。

  • Sheet1已被锁定以进行编辑...单元格A1将被编程为说“已锁定”
  • Sheet1已解锁...单元格A1会说“已解锁”

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

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

这是一张工作表,我不希望公式在使用时全部搞砸,但可能需要完全访问。它更像是提醒用户他们处于“解锁”模式,所以要格外小心。

使用VBA已成定局吗?

我是VBA noob,但不介意使用代码作为此

的解决方案

欢迎任何想法或建议

2 个答案:

答案 0 :(得分: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

您可能需要额外的处理来控制文件是否已保存/未保存等。

答案 1 :(得分: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