VBA调用SendKeys打开exe/lnk文件触发Windows安全警告如何解决?
问题根因
你遇到的安全提示是Windows系统的下载文件区域校验警告,不属于Office内置提示,所以Application.DisplayAlerts = False配置无法屏蔽该弹窗。你当前使用SendKeys传入文件路径的写法本身逻辑也存在问题,SendKeys是模拟键盘输入的接口,无法直接用于打开文件,同时原循环缺少下一个文件的抓取逻辑会进入死循环。
最优解决方案:替换为Shell调用打开文件
放弃不稳定的SendKeys写法,改用WScript.Shell的系统调用接口直接打开快捷方式/可执行文件,不会触发安全提示,同时运行稳定性更高。
修正后代码如下:
Sub Ligacao() Dim strOrigem As String Dim strExtensao As String Dim strFile As String Dim shellObj As Object ' 创建系统Shell对象 Set shellObj = CreateObject("WScript.Shell") strOrigem = ThisWorkbook.Path & "\" strExtensao = ".lnk" strFile = Dir(strOrigem & "*" & strExtensao) Do While strFile <> "" If Mid(strFile, 1, 3) = "Hat" Then ' 直接调用系统接口打开文件 shellObj.Run strOrigem & strFile End If ' 抓取下一个匹配文件,避免死循环 strFile = Dir Loop Set shellObj = Nothing End Sub
若必须保留SendKeys写法的处理方案
如果一定要使用SendKeys逻辑,需要先解除目标文件的区域锁定标记:
- 单个文件处理:右键点击对应.lnk/.exe文件,选择「属性」,勾选窗口底部的「解除锁定」选项后点击确定即可。
- 批量文件处理:以管理员身份打开Windows终端,执行命令
Get-ChildItem "你的文件所在目录路径" -Recurse | Unblock-File,即可批量解除该目录下所有文件的锁定标记。
内容的提问来源于stack exchange,提问作者Rapha
相关产品推荐
相关产品推荐

