使用密码解除表单,而不在macros中显示密码

我最近开始在Excel中编写一些macros。 我有一个受保护的工作表,以及一些允许用户在电子表格的某个点添加/删除列/行的button。

我目前取消保护工作表,执行function,然后保护工作表。

问题是,受保护的表单密码是在纯文本中的任何好奇的眼睛看到的macros。

我如何在工作表上设置密码来保护它,但同时,允许我的macros在执行其function的同时解除电子表格的保护,然后重新保护它,而不必在macros中键入明文密码?

两个选项:

  1. 密码保护VBA。 (虽然VBA保护对于恶意的意图远不是安全的,但它不会比表保护的安全性差)
  2. 如果使用VBA设置工作表保护,则可以指定UserInterfaceOnly:=True

    sh.Protect Password:="Password", UserInterfaceOnly:=True

    一旦以这种方式设置,VBA代码就可以在不提供密码的情况下修改表单。 由于密码必须首先提供一次才能应用保护,请从独立的工作簿或插件中运行此代码。

我发现了一些代码,可能有一些帮助。 这将解锁任何密码保护的工作表。 这取决于密码的长度,需要一点时间,但实际上它只是通过大锤,并打开工作表。 可能不是对你的问题最有效的答案,但它仍然是一个有用的代码位。

 Sub PasswordBreaker() 'Breaks worksheet password protection. Dim i As Integer, j As Integer, k As Integer Dim l As Integer, m As Integer, n As Integer Dim i1 As Integer, i2 As Integer, i3 As Integer Dim i4 As Integer, i5 As Integer, i6 As Integer On Error Resume Next For i = 65 To 66: For j = 65 To 66: For k = 65 To 66 For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66 For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66 For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126 ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _ Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _ Chr(i4) & Chr(i5) & Chr(i6) & Chr(n) If ActiveSheet.ProtectContents = False Then MsgBox "One usable password is " & Chr(i) & Chr(j) & _ Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _ Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n) Exit Sub End If Next: Next: Next: Next: Next: Next Next: Next: Next: Next: Next: Next End Sub 

您可以调用UserForm来处理密码提示,但通过使用PasswordChar作为文本框属性来屏蔽字符。

在这里输入图像说明