从VBA项目中移除密码

66

如何通过编程从Excel VBA项目中删除(已知)密码?

需要明确的是:我想从VBA项目中删除密码,而不是工作簿或任何工作表。


做了一些谷歌搜索 - 似乎没有直接的方法 - 你必须使用一个sendkeys的把戏 http://www.mrexcel.com/forum/showthread.php?t=49034 - DJ.
4
标记的答案并不是最好的... 最好的答案是几年后由Uygar Y提出的。 - Jeremy Thompson
4
@JeremyThompson - 这个回答并没有解答这个问题,它只是解释了如何手动删除未知密码。这个问题是要求如何程序化地删除已知密码。 - Charles Wood
如果以下答案都不适用于您,请尝试这个解决方案:http://stackoverflow.com/questions/19670057/bypass-password-on-an-excel-vba-project-xla/19704979#19704979 - user2140173
Office 365 Excel(此消息时点为2016年)。 使用Notepad++(x64)和Hexedit插件(x64)进行编辑。1)使用7-zip,通过右键单击“打开存档”打开xl文件。 2)深入到“xl”中。 3)右键单击“vbaProject.bin”,选择“以外部方式打开”。 4)使用Notepadd++打开。 5)切换到HexEdit。 6)查找DPB =并重命名为DPX =。 7)保存编辑并更新存档。 8)打开xl文件,在提示继续时选择是(xl发现错误)。 9)在Visual Basic中创建新密码(在dev / visual basic下找到:tools / vbaproject属性)。 10)保存并重新打开。完成! - turtlkky
6个回答

140

另一种去除VBA项目密码的方法是:

  • 使用十六进制编辑器打开xls文件。 (例如Hex Edit http://www.hexedit.com/
  • 搜索DPB
  • 将DPB替换为DPx
  • 保存文件。
  • 在Excel中打开文件。
  • 如果出现任何消息框,请单击“是”。
  • 从VBA项目属性中设置新密码。
  • 关闭并重新打开文件,然后输入新密码以取消保护。

更新:适用于Excel 2010(适用于MS Office Pro Plus 2010 [14.0.6023.1000 64位]),

  • 使用7zip打开XLSX文件

如果工作簿受保护:

  • 浏览到xl文件夹
  • 如果工作簿受保护,请右键单击workbook.xml并选择编辑
  • 找到部分<workbookProtection workbookPassword="XXXX" lockStructure="1"/>XXXX是加密的密码)
  • 删除XXXX部分。(例如<workbookProtection workbookPassword="" lockStructure="1"/>
  • 保存文件。
  • 当7zip询问您是否要更新存档时,请单击
  • 关闭7zip并重新打开XLSX。
  • 单击保护工作簿选项卡的审阅选项。
  • 可选:保存您的文件。

如果工作表受保护:

  • 浏览到xl / worksheets /文件夹。
  • 右键单击Sheet1.xmlSheet2.xml等文件,并选择编辑
  • 找到代码中的<sheetProtection password="XXXX" sheet="1" objects="1" scenarios="1" />部分。
  • 删除加密的密码(即<sheetProtection password="" sheet="1" objects="1" scenarios="1" />)。
  • 保存该文件。
  • 当7zip询问是否要更新压缩文件时,请选择
  • 关闭7zip,重新打开您的XLSX文件。
  • 审阅选项卡上,单击取消保护工作表
  • 可选:保存您的文件。

6
对于原回答的补充:如果你有一个xlsx文件,在Excel中打开它,然后选择“另存为”xls格式。然后按照上述步骤进行操作... - Uygar Y
6
如果你有一个 .xlsx 文件,你也可以解压它,在 xl/vbaProject.bin 文件上进行查找/替换,然后重新压缩。 - Sander Steffann
3
这个技巧似乎在Excel 2010(V14.0.6129.5000)中不再有效。虽然我可以进入VBA编辑器,但打开模块时出现错误消息“意外错误(40230)”。 - Andreas J
1
你仍然可以编写程序并在你编写的应用程序中执行上述步骤,不是吗? - Uygar Y
2
刚刚在使用Office Pro Plus 2016(64位操作系统上的32位Office)时,遇到了“40230”错误。但是,一旦我进入项目属性并禁用/重新启用密码保护,这些错误就停止了。 - r2evans
显示剩余6条评论

32

我找到了另一种方法来解决这个问题,避免丢失VBA项目密码。

如果文件类型是XLSM:

  1. .xlsm 重命名为 .zip(或者可以使用7zip/WinRAR打开.xlsm文件并打开/提取它)并打开/提取它
  2. 用Notepad++或HexEdit编辑 xl/vbaProject.bin 文件
  3. 搜索 DPB= 并替换为 DPx=

输入图像描述

  1. 保存文件
  2. 将此文件复制回 .zip(或将文件重新压缩回去)
  3. 将存档重新命名为 .xlsm
  4. 在Excel中打开文件,如果提示“继续加载项目”,请单击 是。如果出现错误提示,单击确定。 注意:代码可能仍然为空或损坏,我们会在下一步中修复它。
  5. 另存为新的 .xlsm 文件
  6. 在Excel中打开新文件(现在应该没有错误了)
  7. 按Alt + F11打开VBA编辑器

或者

也可以按照以下步骤操作

我找到了另一种方法来解决这个问题,避免丢失Excel密码。

使用Hex-editor XVI32 进行处理

如果文件类型是XLSM:

  1. 用 7-Zip 打开 XLSM 文件(右键单击 -> 7-Zip -> 打开归档文件)。2. 将 xl/vbaProject.bin 文件从文件中复制出来(可以从 7-Zip 拖放),不要关闭 7-Zip。

  2. 用 HexEdit 打开 vbaProject.bin 文件。

  3. 搜索“DPB =”并将其替换为“DPx =”。

  4. 保存文件。

  5. 将此文件复制回 7-Zip(拖放方式也可)。

  6. 在 Excel 中打开 XLSX 文件,如果提示“继续加载项目”,请点击是。如果提示错误,请点击确定。8.按下 Alt + F11 打开 VBA 编辑器。

  7. 当按下时,它会显示错误“意外错误(40230)”,只需点击确定(6 或 7 次),直到消失。

  8. 然后它会自动打开。


5
这个技巧对我很有用...但是在步骤9时,错误即使点击了20-25次也没有消失。我把文件存成了另一个文件,然后它就起作用了。 - Anupam Maiti
3
这对我在Excel 2016 64位版本上起作用。而且你真的不需要一个十六进制编辑器。您可以使用Notepad++或任何类似的文本编辑器进行搜索和替换(第4步)。之前的评论也是正确的。保存为新的XLSM文件并重新打开Excel后,“意外错误(40230)”就会消失。 - Mike
我有一个 xls 文件和 Excel 2016。在 Mike 的帮助下,当我将文件从 xls 更改为 xlsm 时,它起作用了。我不需要使用 7-zip 来获取 bin 文件。 - Timo
在第7步,我遇到了以下错误:“已删除部分:/xl/vbaProject.bin 部分”。现在,所有宏都不再存在了。我做错了什么? - LB1234

10
这里有两种方法可以使用SendKeys简单地取消VBA项目的保护。这将让您进入项目,因此您必须继续使用SendKeys来找出删除密码保护的方法: http://www.pcreview.co.uk/forums/thread-989191.php 这里还有一种更高级、更可靠的方法来取消保护。同样,它只会为您解锁VB项目。 http://www.ozgrid.com/forum/showthread.php?t=13006&page=2 我没有尝试过这两种方法,但如果这是您需要做的事情,这可能会为您节省一些时间...

1
我有代码。该怎么办?我无法打开VBEditor,也无法执行任何操作,因为项目被锁定,所以无法执行任何新脚本!? - serhio
+1 :) @serhio:还有一种方式是使用APIS - Siddharth Rout
2
Uygar Y在Stack Overflow上的回答仍然是一个适用于Office 2016的相关答案。它完全且容易地工作,这就削弱了使用Office密码来保护文档的任何期望。我从来没有对它们有太多信心,认为它们可以在几个小时的电脑工作后被禁用,但他的答案让我只用了两分钟的时间就解决了问题。密码可以防止不诚实和不懂电脑的人进入,但在我看来,它们大多是骗局。 - r2evans

4

我对Excel 2016的看法:

  1. 使用Notepad++打开xls文件
  2. 查找DPB=并将其替换为DPx=
  3. 保存文件
  4. 打开文件,打开VB编辑器,打开模块将无法工作(错误40230
  5. 将文件另存为xlsm格式
  6. 它就可以工作了

3

1
使用7-Zip打开xlsm文件后,提取vbaproject.bin,在Notepad++中将DpB替换为DPx并重新保存后,我获得了大量的vbaproject错误,并且vba项目密码消失了,但没有代码/表单。右键单击导出后,可以重新导入到新项目中。

是的,它很简单,只需将DPB替换为DPX,将其7zip压缩为XLSM,打开该文件,您就可以将模块1x1导出为.bas文件。打开一个新的Excel文件,再次导入模块1x1,您就可以获得可读的代码。然后,您可以从导入的VBA模块中重建所需的VBA代码,以便从原始工作簿中获取。 - Matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接