input数值后locking单元格,使用正确密码(VBA)解锁的可能性

我们有一个Excel表格,用于input数据。 为了保护数据,input值后必须locking。 错误或稍后更正后,必须可以在input密码后更改值。

我一直在使用受保护的工作表,每次尝试编辑单元格的值时,都会收到一条消息,告诉我取消保护工作表。 因为我想在VBA中处理密码的事情,所以我想要一个事件被触发。 问题是,唯一可能的事件是worksheet_change事件。 不幸的是,事件从来没有触发,因为我得到的消息说解除表单,以改变价值。

我已经提出了一个临时解决scheme,但不是100%的用户友好:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Value <> "" Then Dim pass As String pass = InputBox("Enter Password") If pass <> "password" Then MsgBox ("Wrong password") Else Sheets("Blad1").Unprotect password:="password" Target.Locked = False Target.Value = InputBox("Enter your input") Target.Locked = True Sheets("Blad1").Protect password:="password" End If End If End Sub 

我在这里捕捉到双击事件,这是一个事件前的事件,更适合我的需求。 这会改变它的值,但是你必须通过input框input值,这限制了单元格链接function。 它还不断产生消息“解除表单以便进行编辑…”。

  • 对于我原来的问题还有另一种方法/解决scheme吗?
  • 是否有更适合我需求的事件(比如before_change)?
  • 如果上述问题不能回答,是否有可能摆脱消息解除表单的保护?

查看答案的详细解决scheme。

最终,我通过添加Worksheet_BeforeDoubleClick事件来解决这个问题。 当他们双击一个非空单元格时,会提示他们是否要解锁表单。 如果他们单击是,他们必须input密码,然后才能访问单元格input。 要进行设置,必须阻止所有没有密码的单元格(包含公式,标题,…的单元格),并保留空白单元格不被阻塞。 之后,用密码保护表格。 不要忘记在VBA上input密码,或者知道如何访问的用户可能会在代码中看到密码。

以下是我在最终版本中使用的代码:

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Value <> "" Then changeInput = MsgBox("Do you want to unlock the sheet?", vbYesNo + vbQuestion, "Unlock sheet") If changeInput = vbYes Then Dim pass As String pass = InputBox("Enter Password") If pass <> "password" Then MsgBox ("Wrong password") Else ActiveSheet.Unprotect Password:="password" Target.Locked = False End If End If End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) Dim cel As Range ActiveSheet.Unprotect Password:="password" For Each cel In Target If cel.Value <> "" Then cel.Locked = True End If Next cel ActiveSheet.Protect Password:="password" End Sub