Excel重新打开xlsm文件时GET.WORKBOOK函数失效问题求助
GET.WORKBOOK函数重开失效问题排查&解决思路
基础配置排查
- 确认宏设置等级合理:路径为「文件→选项→信任中心→信任中心设置→宏设置」,不要选择禁用所有宏且不通知,优先选择启用所有宏(仅限受信任位置下的文件,风险较低)或者禁用无数字签名的宏,其他需通知。
- 确认
GET.WORKBOOK的调用方式正确:该函数属于Excel 4.0(XLM)宏函数,不能直接写在单元格内,必须通过「公式→定义名称」封装后调用。比如先定义名称为GetSheetList,引用位置填写=GET.WORKBOOK(1)&T(NOW()),再在单元格内写=INDEX(GetSheetList,ROW())才是合法用法,直接写在单元格中本身就会触发无效报错。 - 确认文件保存格式合规:不要手动修改文件后缀名,必须通过「另存为→Excel 启用宏的工作簿(*.xlsm)」的官方路径保存,手动改后缀不会触发Excel的宏支持逻辑,重开就会失效。
定向故障修复
- 清理名称管理器冲突项:打开「公式→名称管理器」,删除所有报错、引用位置无效的冗余自定义名称,再重新封装
GET.WORKBOOK的调用逻辑,避免旧错误定义干扰正常调用。 - 开启XLM宏单独权限:Office 2021/365版本默认会单独阻断未签名的XLM宏,哪怕设置了受信任位置也可能拦截,操作路径为「信任中心→信任中心设置→宏设置→勾选启用Excel 4.0(XLM)宏」,保存设置后重启Excel再打开文件测试。
- 解除文件安全锁定:如果文件是从网络/其他设备传输过来的,右键点击文件→属性→常规选项卡底部如果有「解除锁定」的勾选框,勾选后确认即可,系统给跨设备文件添加的安全标记会强制禁用宏功能,不受受信任位置规则限制。
永久规避方案
如果上述操作都无法解决问题,可以用VBA实现完全相同的功能,规避XLM宏的兼容和安全限制,示例代码如下,放入模块后即可直接在单元格调用:
Function GetAllSheetNames() As Variant Dim sheetArr() As String ReDim sheetArr(1 To ThisWorkbook.Sheets.Count) Dim i As Integer For i = 1 To ThisWorkbook.Sheets.Count sheetArr(i) = ThisWorkbook.Sheets(i).Name Next i GetAllSheetNames = sheetArr End Function
单元格调用时输入=INDEX(GetAllSheetNames(),ROW())即可,功能和GET.WORKBOOK(1)完全一致,不会出现重开失效的问题。
内容的提问来源于stack exchange,提问作者Tristan Iriks
相关产品推荐
相关产品推荐

