You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell调用Excel宏提示宏已禁用的解决方法咨询

解决方法

核心修改逻辑为:在创建Excel COM对象之后、打开工作簿之前,临时调整Excel的自动化安全级别允许宏运行,执行完成后还原默认安全配置,避免影响Excel后续的安全机制。

修正后的完整代码

# 启动Excel进程
$excel = New-Object -comobject Excel.Application  

# 保存原有自动化安全配置,后续还原
$originalSecurity = $excel.AutomationSecurity
# 临时设置为允许所有宏运行(对应枚举值msoAutomationSecurityLow)
$excel.AutomationSecurity = 1

# 打开宏工作簿
$FilePath = 'C:\Users\Username\Desktop\ExcelWorkbook.xlsm' 
$workbook = $excel.Workbooks.Open($FilePath)  

# 可视设置,调试用,生产环境可设为$false
$excel.Visible = $true  

# 运行指定宏
$excel.Application.Run("Macro")

# 还原Excel原有安全配置,必须执行避免降低系统安全等级
$excel.AutomationSecurity = $originalSecurity

# 退出Excel
$excel.Quit()
# 释放COM对象资源,避免残留Excel后台进程
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
Remove-Variable excel -ErrorAction SilentlyContinue

# 完成提示,任务计划调用场景可删除
$wshell = New-Object -ComObject Wscript.Shell
$wshell.Popup("Operation Completed",0,"Done",0x1)

额外排查项

如果修改后仍存在报错,可检查以下配置:

  • 右键点击对应xlsm文件,选择「属性」,如果窗口底部有「解除锁定」勾选框,勾选后保存,避免系统拦截来自网络的文件运行宏
  • 打开Excel的「信任中心」-「信任中心设置」-「宏设置」,确认选中「禁用所有宏,并发出通知」,不要选择「禁用所有宏,并且不通知」
  • 宏名称要和工作簿内定义的完全一致,如果宏归属指定模块,需要写全调用路径,例如$excel.Run("Module1.Macro")

内容的提问来源于stack exchange,提问作者New Kid on the block

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:24:03