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

将Excel工作表的保护状态传递给单元格,excel,protection,worksheet,vba,Excel,Protection,Worksheet,Vba,我很好奇是否可以将excel工作表的保护状态传递给该工作表的单元格。 e、 g Sheet1被锁定用于编辑…单元格A1将被编程为“锁定” Sheet1已解锁…单元格A1将显示“解锁” 工作表上的按钮用于打开和关闭工作表保护 使用工作簿打开事件打开工作表时,我的工作表将被锁定 这是一张表格,我不希望公式在使用时被弄脏,但可能需要完全访问。它更多的是提醒用户,他们处于“解锁”模式,因此要格外小心 使用VBA是否已成定局 我是VBA noob,但不介意使用代码作为解决方案 欢迎提出任何想法或建议将

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

  • Sheet1被锁定用于编辑…单元格
    A1
    将被编程为“锁定”
  • Sheet1已解锁…单元格
    A1
    将显示“解锁”
工作表上的按钮用于打开和关闭工作表保护

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

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

使用VBA是否已成定局

我是VBA noob,但不介意使用代码作为解决方案


欢迎提出任何想法或建议

将其放入工作表的代码模块中,该模块将在状态栏中放置一个提醒(这避免了需要锁定/解锁工作表才能将状态写入单元格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
要保护/取消保护工作表,可以将其添加到插入>模块。然后将这些宏附加到单独的命令按钮,或从“开发人员”>“宏”功能区运行

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

Sub Sht1Protect()
    Sheet1.Protect myPassword
End Sub

Sub Sht1Unprotect()
    Sheet1.Unprotect myPassword
End Sub

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

您可以使用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

谢谢David-一些noob问题…我是将其放入sheet1的代码模块还是进入insert>module?我已经把它放进了这两个程序中,并在VBA编辑器中逐步完成了它。它可以作为宏链接到按钮,还是使用excel内置的“保护工作表”切换?我可以让它在完成后自动更新为受保护/未受保护吗?嗨@JohnM,请参阅我的修订版。谢谢David,虽然这可以实现,但对于我的实现,我更希望能够格式化单元格,使其状态对用户更明显。那么brettdj的回答就是这样。下一次,如果你不让我去探索你实际上不感兴趣的问题/选项,那就太好了。干杯,哇。很抱歉你这么想。作为这个网站和Excel VBA代码的新用户,我以开放的心态对待每一件事,并详细研究了您的解决方案,看看它是否适合我所做的工作。没有冒犯的意思。谢谢你,brettdj-这符合我的要求。使用activex控件是否会影响与它们一起使用的VBA代码?
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