【问题标题】:Excel Run Macro button with password protection带密码保护的 Excel 运行宏按钮
【发布时间】:2019-07-17 17:17:58
【问题描述】:

我的工作簿受密码保护,由用于输入的解锁单元格和用于 PDF 打印的按钮组成。由于工作表的密码保护,PDF 打印按钮不起作用。

我已经尝试过以下较早的问题和答案。然而它说我输入的密码是错误的(!)

Macros don't work when sheet is protected. Running macro returns run-time error 1004

Sub ButtonClick()

UnprotectAll

'Some stuff here

ProtectAll

End Sub

Private Const yourPassword As String = "ThePassWord"

Sub UnprotectAll()
    Dim sh As Worksheet
    For Each sh In ActiveWorkbook.Worksheets
        sh.Unprotect Password:=yourPassword
    Next sh
End Sub

Sub ProtectAll()
    Dim sh As Worksheet
    For Each sh In ActiveWorkbook.Worksheets
        sh.Protect Password:=yourPassword
    Next sh
End Sub

我明白了

错误“1004”。
您提供的密码不正确。

【问题讨论】:

  • 您是否尝试过提供正确的密码?
  • @TimStack 是的,我相信我有。但是什么是“正确的密码”?几个用户应该能够使用此工作簿和按钮。
  • AFAIK 是锁wb的人,所以你应该知道密码。用户不需要知道密码,只要你的密码用正确的密码解锁了wb
  • @TimStack 太棒了!这是同一个密码。我已经重新定位了密码字符串,它解决了错误 1004。但运行脚本后所有工作表都不受保护。
  • 这正是您编写的代码。您希望 VBA 执行您编写的操作吗?

标签: excel vba


【解决方案1】:
  1. 确保在每个模块和工作表代码中使用Option Explicit 作为第一行!这可确保您不会遇到未声明的局部范围变量 yourPassword,该变量为空。

    我建议始终激活Option Explicit:在 VBA 编辑器中转到 ToolsOptionsRequire Variable Declaration

  2. 确保使用密码取消(手动)所有工作表的保护。

  3. 在模块中将所需的新密码定义为常量

     Private Const yourPassword As String = "ThePassWord"
    
  4. 将此常量用于您的.Protect/.Unprotect

     sh.Protect Password:=yourPassword
    
  5. 然后再次运行您的代码。

【讨论】:

  • 谢谢!我才意识到这一点。问题是Private Const yourPassword As String = "ThePassWord" 位于模块的中间,而不是一开始。
  • @SimonJ 无论如何激活Option Explicit。它会引发警告。
  • 我刚做了。它没有发出警告。但是运行脚本后所有工作表现在都不受保护?
  • @SimonJ 很奇怪,我认为应该这样做。 • 如果您运行ProtectAll,则应保护所有内容。或者你的问题是什么?请注意,ActiveWorkbook 是具有焦点的工作簿(位于顶部),但 ThisWorkbook 是运行代码的工作簿。
  • 我在ButtonClick()End Sub 之前运行ProtectAll。然而,它使所有工作表和整个工作簿都不受保护。
猜你喜欢
  • 2017-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
相关资源
最近更新 更多