Microsoft Access VBA运行WScript.Shell.run时报Permission Denied错误
问题成因
- 文件/目录权限不匹配:同事的Windows用户账户对
C:\Support\Masters\Access\Policy\Batch目录没有读取权限,或对PolicyRename.bat文件没有执行权限,多数企业设备会默认限制普通用户对C盘非公共目录的执行权限。 - WScript.Shell组件被拦截:企业组策略禁用了VBA调用WScript.Shell对象的权限,部分终端安全软件也会默认拦截Office程序调用脚本宿主对象执行外部程序的行为。
- 批处理内部操作权限不足:
PolicyRename.bat内部包含的操作(例如修改受保护目录的文件、写入注册表、调用其他受限程序)需要更高系统权限,普通权限启动的Access无法向批处理传递对应权限。 - 路径映射异常:你本地的
C:\Support路径为本地可用目录,但同事设备上该路径不存在,或是未完成身份校验的网络共享路径,也会触发权限类报错。 - Office信任中心限制:同事的Access信任中心未将当前Access文件所在目录加入信任位置,或宏权限设置为禁用所有宏,VBA的高危操作会被直接拦截。
排查与解决方法
- 验证基础路径权限:让同事直接在资源管理器访问
C:\Support\Masters\Access\Policy\Batch目录,双击运行PolicyRename.bat,如果直接运行也报错,说明是文件或目录权限问题。右键对应目录→属性→安全,给同事的账户添加「读取和执行」「列出文件夹内容」「读取」权限即可。 - 验证WScript.Shell组件可用性:在同事的Access中运行如下测试代码:
Sub TestWshAvailable() Dim wsh As Object Set wsh = CreateObject("WScript.Shell") ' 调用系统自带的记事本验证调用权限 wsh.Run "notepad.exe", 1, True End Sub
如果该测试代码也报权限错误,说明组策略或安全软件拦截了WScript.Shell调用,可联系IT管理员解除对应限制,或将Access程序加入安全软件白名单。
- 提升Access运行权限:右键Access快捷方式→选择「以管理员身份运行」,再执行原VBA代码,如果运行正常说明是普通账户权限不足导致。可根据批处理的操作需求固定给Access设置管理员启动权限,或调整批处理内部操作的目标路径为普通用户默认可访问的目录。
- 调整Office信任中心设置:打开Access→文件→选项→信任中心→信任中心设置→受信任位置,将当前Access文件所在的文件夹加入受信任位置,同时在宏设置中选择适合的权限等级,确保VBA代码可以正常运行。
- 调整批处理存储路径:如果企业默认限制了C盘根目录的操作权限,可以将
PolicyRename.bat和相关依赖文件迁移到%AppData%、用户桌面等普通用户默认拥有完全权限的目录,修改VBA代码中的strCommand参数为对应路径即可。
内容的提问来源于stack exchange,提问作者rwoj67
相关产品推荐
相关产品推荐

