如何通过VBA代码绕过并移除VB Project密码
解决VBProject加密后导出副本修改模块报错的问题
当原工作簿的VBProject设置密码后,导出的副本会继承该保护机制,导致原代码无法修改VB组件(报错“无法执行此操作,因为项目受保护”)。以下是修改后的代码,可实现解锁副本VBProject、完成原有清理操作后移除密码保护,最终输出无VB保护的xlsm格式文件:
修改后的完整代码
Dim FileName, FilePath As String Dim wb_other As Workbook Dim VBProj As VBIDE.VBProject Dim VBComp As VBIDE.VBComponent Dim originalPassword As String ' 替换为你的VBProject实际密码 originalPassword = "YourVBProjectPassword" FileName = "My Spreadsheet " & Format(Now(), "yyyy.mm.dd") & ".xlsm" FilePath = "C:\Users\Downloads\" ' 导出原工作簿副本 ActiveWorkbook.SaveCopyAs FilePath & FileName ' 打开副本工作簿 Set wb_other = Workbooks.Open(FilePath & FileName) ' 执行原有清理:删除指定工作表和查询 wb_other.Sheets("View 1").Delete wb_other.Sheets("View 2").Delete wb_other.Queries("Query1").Delete ' --- VBProject解锁与密码移除逻辑 --- Set VBProj = wb_other.VBProject ' 解锁受保护的VBProject VBProj.Unprotect originalPassword ' 执行原有VB组件清理:删除指定模块、清空ThisWorkbook代码、删除窗体 Set VBComp = VBProj.VBComponents("Main") VBProj.VBComponents.Remove VBComp Set VBComp = VBProj.VBComponents("Export") VBProj.VBComponents.Remove VBComp ' 清空ThisWorkbook模块所有代码 With VBProj.VBComponents("ThisWorkbook").CodeModule .DeleteLines 1, .CountOfLines End With Set VBComp = VBProj.VBComponents("UserForm") VBProj.VBComponents.Remove VBComp ' 移除副本的VBProject密码保护(设为无保护状态) VBProj.Protect Password:="", Locked:=False ' --- 结束新增逻辑 --- ' 保存并关闭副本 wb_other.Save wb_other.Close ' 释放对象 Set VBComp = Nothing Set VBProj = Nothing Set wb_other = Nothing
关键注意事项
- 引用库要求:必须在VBA编辑器的「工具」→「引用」中勾选
Microsoft Visual Basic for Applications Extensibility 5.3 - Excel信任设置:需在Excel选项→信任中心→信任中心设置→宏设置中,勾选「信任对VBA工程对象模型的访问」,否则代码无法操作VBProject
- 密码替换:务必将代码中的
"YourVBProjectPassword"替换为你实际使用的VBProject密码
代码逻辑说明
- 先导出原工作簿的副本并打开,执行原有工作表和查询的删除操作
- 使用原密码解锁副本的VBProject,获得组件修改权限
- 完成原有VB组件的清理任务(删除指定模块、清空ThisWorkbook代码、删除窗体)
- 最后将副本的VBProject设置为无密码保护状态,确保后续打开副本时无需输入密码
- 保存并关闭副本,完成整个导出流程
内容的提问来源于stack exchange,提问作者seaside_escape
相关产品推荐
相关产品推荐

