Excel宏运行时错误1004:无法执行getUnits宏的解决方案求助
解决Excel宏运行时错误1004:无法访问getUnits宏的问题
问题根源分析
- 你录制的
Makro1里出现Application.Run "getUnits",是因为录制过程中触发了本地环境独有的宏——这个getUnits要么在你的个人宏工作簿(Personal.xlsb)里,要么是某个本地加载项、其他工作簿中的宏,同事的Excel环境里没有这个宏,所以触发1004错误。 - 宏录制会完整捕获操作时的所有后台动作,哪怕你没手动运行
getUnits——比如切换工作表时触发了绑定getUnits的事件、自定义按钮,或是加载项自动调用了它,都会被记录进代码。
解决方案
方案1:移除不必要的getUnits调用(优先推荐)
从代码逻辑看,Makro1的核心是用GoalSeek计算回收期,getUnits大概率是你本地的辅助宏,直接删除这两行调用即可:
Application.Run "getUnits"
优化后精简代码(去掉冗余的滚动、选择操作,不影响核心功能):
Sub Makro1() ' ' Makro1 Makro ' Výpočet doby návratnosti ' ' Klávesová skratka: Ctrl+r ' Sheets("Doba návratnosti").Range("G24").GoalSeek Goal:=0, ChangingCell:=Sheets("Doba návratnosti").Range("D24") Sheets("Výsledky").Select End Sub
方案2:嵌入getUnits宏到当前工作簿
如果确实需要getUnits的功能,把它的代码整合到当前工作簿:
- 打开你的宏工作簿,按
Alt+F11打开VBA编辑器 - 右键点击当前工作簿的模块列表,选择插入>模块
- 找到你本地
getUnits的完整代码,粘贴到新模块中 - 保存工作簿为
.xlsm格式,重新发给同事
方案3:检查同事的宏安全设置
让同事确认以下设置:
- 打开Excel选项>信任中心>信任中心设置>宏设置,选择启用无数字签署的所有宏
- 若
getUnits来自加载项,确保同事安装了同款加载项并启用
关于录制宏时出现getUnits的疑惑
宏录制会捕获操作时的所有后台行为,包括:
- 切换工作表时触发了
Worksheet_Activate事件,该事件里调用了getUnits - 你点击的自定义按钮绑定了
getUnits宏 - 本地加载项在操作时自动运行了
getUnits
这些动作都会被记录进Makro1,所以宏名显示为Makro1,但代码里会出现对getUnits的调用。
内容的提问来源于stack exchange,提问作者Richard Wagner
相关产品推荐
相关产品推荐

