我不能用VBA解锁vbaproject

下面是我的function,由于某种原因,它不工作。 如果我在最后一个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 

为了testing这个,我们创build一个名为Book2.xlsm的新工作簿。

为了testing目的,将这些代码粘贴到Book2模块中。

 Sub Book2Macro() End Sub 

使用密码保护它,然后closures它。 这对于locking生效是必要的。

现在创build一个新的工作簿,说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 

现在打开我们创build的第一个工作簿。 Book2.xlsm。 检查Book2的VBA编辑器,您会注意到它受密码保护。 您还会注意到它是活动的工作簿。 通过单击View Tab | Switch Workbooks | Book1激活Book1 View Tab | Switch Workbooks | Book1

在这里输入图像说明

现在点击Developer tab | Macros Developer tab | Macros如果你看不到开发者标签,那么我会build议通过这个链接 。

在这里输入图像说明

点击Macro Dialog BoxSamplemacros,就完成了。

在这里输入图像说明

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

Sendkeys是不可靠的取决于你的使用。 如果你正确使用它,那么这是非常可靠的:)

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

看看这些post的代码示例:
http://www.mrexcel.com/archive/VBA/29825.html
http://www.vbaexpress.com/forum/showthread.php?t=30687

这些post是为了信息:
http://www.excelforum.com/excel-programming/490883-why-doesnt-sendkeys-work-consistently.html
http://www.ozgrid.com/forum/showthread.php?t=13006

他们讨论了为什么在多任务环境下使用Sendkeys不太可靠,并且很多人不愿意用于商业目的。 但是,对于不受保护的VBA项目来说,这似乎是唯一的解决scheme。

希望能帮助到你!