我很好奇是否可以将excel工作表的保护状态传递给该工作表的单元格。 e.g。
A1
将被编程为说“已锁定” A1
会说“已解锁”。 工作表上的按钮用于打开和关闭工作表保护。
我的工作表将在使用workbook_open事件打开时被锁定。
这是一张工作表,我不希望公式在使用时全部搞砸,但可能需要完全访问。它更像是提醒用户他们处于“解锁”模式,所以要格外小心。
使用VBA已成定局吗?
我是VBA noob,但不介意使用代码作为此
的解决方案欢迎任何想法或建议
答案 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