Excel 2021新建工作簿VBProject设密后关闭异常的解决方法
解决Excel 2021新建工作簿VBProject密码保存异常问题
问题根源
你遇到的情况是因为代码操作VBProject时对象指向错误——默认操作了当前代码所在的原工作簿,而非新建的目标工作簿,关闭时的保存操作进一步把错误的密码设置同步到了原工作簿。
可行解决办法
明确指定新建工作簿的VBProject对象
不要依赖ActiveWorkbook.VBProject来设置密码,直接通过新建工作簿的变量引用其VBProject,避免因工作簿激活状态变化导致对象指向错误。提前开启VBA项目对象模型访问权限
操作VBProject需要Excel信任授权:- 打开Excel,依次点击「文件」>「选项」>「信任中心」>「信任中心设置」>「宏设置」
- 勾选「信任对VBA项目对象模型的访问」,确定后重启Excel生效。
修正后的示例代码
Sub SetNewWorkbookVBPassword() Dim newWB As Workbook Dim targetVBProj As VBIDE.VBProject Dim savePath As String ' 定义保存路径(自行修改为实际路径) savePath = "C:\Users\你的用户名\Desktop\带密码保护的工作簿.xlsm" ' 新建工作簿 Set newWB = Workbooks.Add ' 绑定新建工作簿的VBProject Set targetVBProj = newWB.VBProject ' 设置VBProject保护密码(替换为你的密码) targetVBProj.Protect Password:="123456", Locked:=True ' 保存为启用宏的格式(必须,否则VBProject会丢失) newWB.SaveAs Filename:=savePath, FileFormat:=xlOpenXMLWorkbookMacroEnabled ' 关闭工作簿(已保存过,SaveChanges设为False即可) newWB.Close SaveChanges:=False End Sub
额外注意事项
- 新建工作簿必须保存为启用宏的格式(.xlsm、.xlsb等),普通.xlsx格式不支持VBProject,密码设置会直接失效。
- 若必须使用
newWB.Close SaveChanges:=True,需确保执行关闭前新建工作簿处于激活状态(可添加newWB.Activate语句),但更稳妥的方式是先显式保存再关闭。
内容的提问来源于stack exchange,提问作者8平民
相关产品推荐
相关产品推荐

