我无法用VBA解锁vbaproject

时间:2012-07-03 05:51:59

标签: vba excel-vba excel

下面是我的功能,由于某种原因它不起作用。如果我在最后一个if语句中放置一个断点并删除发送“%{F11}”它确实有效。所以我的猜测是“%F11”无效。有没有人有想法?

Sub UnprotecPassword(wb As Workbook, ByVal projectPassword As String)
    Dim currentActiveWb As Workbook    

    If wb.VBProject.Protection <> vbext_pp_locked Then
        Exit Sub
    End If
    Set currentActiveWb = ActiveWorkbook
    wb.Activate

    SendKeys "%{F11}"
    SendKeys "^r" ' Set focus to Explorer
    SendKeys "{TAB}" ' Tab to locked project
    SendKeys "~" ' Enter
    SendKeys projectPassword
    SendKeys "~" ' Enter

    If (wb.VBProject.Protection = vbext_pp_locked) Then
        MsgBox ("failed to unlock")
    End If
    currentActiveWb.Activate
End Sub

2 个答案:

答案 0 :(得分:3)

为了测试这个,让我们创建一个名为Book2.xlsm的新工作簿。

用于测试目的将此代码粘贴到Book2模块中。

Sub Book2Macro()

End Sub

使用密码说a保护它,然后将其关闭。这对于锁定生效是必要的。

现在创建一个新的工作簿,说Book1,然后在模块中粘贴此代码。

Sub Sample()
    UnprotecPassword Workbooks("Book2.xlsm"), "a"
End Sub

Sub UnprotecPassword(wb As Workbook, ByVal projectPassword As String)
    Dim currentActiveWb As Workbook

    If wb.VBProject.Protection <> 1 Then
        Exit Sub
    End If

    Set currentActiveWb = ActiveWorkbook

    wb.Activate

    SendKeys "%{F11}"
    SendKeys "^r" ' Set focus to Explorer
    SendKeys "{TAB}" ' Tab to locked project
    SendKeys "~" ' Enter
    SendKeys projectPassword
    SendKeys "~" ' Enter

    If (wb.VBProject.Protection = vbext_pp_locked) Then
        MsgBox ("failed to unlock")
    End If
    currentActiveWb.Activate
End Sub

现在打开我们创建的第一个工作簿; Book2.xlsm。检查Book2的VBA编辑器,您会发现它受密码保护。您还会注意到它是活动工作簿。点击Book1

激活View Tab | Switch Workbooks | Book1

enter image description here

现在点击Developer tab | Macros如果您看不到开发人员标签,那么我建议您浏览link

enter image description here

点击Sample中的Macro Dialog Box宏,您就完成了。

enter image description here

如果您检查VBA编辑器,您会注意到Book2的VBA编辑器现在已解锁/可访问。

Sendkeys根据您的使用情况而不可靠。如果你正确使用它那么非常可靠:)

还有一种解锁VBA密码的方法,但这非常复杂,涉及调用FindWindow等API ...

答案 1 :(得分:0)

查看这些帖子以获取代码示例:
http://www.mrexcel.com/archive/VBA/29825.html
http://www.vbaexpress.com/forum/showthread.php?t=30687

这些帖子仅供参考:
http://www.excelforum.com/excel-programming/490883-why-doesnt-sendkeys-work-consistently.html
http://www.ozgrid.com/forum/showthread.php?t=13006

他们讨论了为什么在多任务处理环境中使用Sendkeys不是很可靠,许多人不鼓励将其用于商业目的。 但是,对于取消保护VBA项目,它似乎是唯一的解决方案。

希望它有所帮助!