如何通过Excel VBA实现打开带密码的ThisWorkbook时不弹提示
解决Excel加密工作簿自动输入密码不弹窗的问题
原代码的问题
你的代码逻辑存在根本性错误:
Workbook_Open事件是工作簿成功打开后才触发的,这时候密码输入提示早已经出现过了,根本无法提前拦截。- 代码里重复打开当前工作簿,还会造成不必要的文件重复加载,甚至触发循环打开的问题。
正确实现方案
由于加密工作簿的密码验证流程在VBA事件之前,无法直接在自身的VBA代码里实现自动输密码,需要借助一个辅助启动工作簿来完成:
- 创建一个新的空白工作簿,保存为「启动器.xlsm」(必须启用宏)
- 在这个启动器的
ThisWorkbook模块中添加以下代码:
Private Sub Workbook_Open() ' 关闭启动器自身的显示,避免干扰 ThisWorkbook.Windows(1).Visible = False ' 自动打开目标加密工作簿,传入密码 Dim targetPath As String ' 替换成你的加密工作簿的完整路径,比如"C:\Users\XXX\Desktop\加密文件.xlsx" targetPath = "你的加密工作簿完整路径" Application.DisplayAlerts = False Workbooks.Open Filename:=targetPath, Password:="1234", WriteResPassword:="" Application.DisplayAlerts = True ' 关闭启动器工作簿 ThisWorkbook.Close SaveChanges:=False End Sub
- 启动方式(二选一):
- 直接双击「启动器.xlsm」,即可自动打开目标加密文件且不弹出密码提示。
- 把「启动器.xlsm」放到Excel自动启动文件夹(一般是
C:\Users\你的用户名\AppData\Roaming\Microsoft\Excel\XLSTART),每次打开Excel都会自动加载启动器并打开目标文件。
补充说明
如果不想用启动器,也可以把代码放到Personal.xlsb(个人宏工作簿)中,通过自定义快捷键触发打开加密文件,但无法实现「双击加密文件就自动输密码」的效果——因为双击加密文件时,Excel会先触发密码验证流程,再执行任何VBA代码。
内容的提问来源于stack exchange,提问作者Noam Brand
相关产品推荐
相关产品推荐

