Excel打开多工作簿时文件名提取公式串值解决方法咨询
问题根因
原有公式失效的核心原因是CELL("filename")省略第二参数时,默认返回当前激活状态工作表所属文件的信息,只要切换活动工作簿,返回值就会同步变化,本身不具备绑定公式所在文件的能力,多文件同时打开时必然出现串值问题。
稳定实现方案
方案1:纯公式实现(满足多开互不干扰要求)
给CELL()函数传入当前工作表的明确单元格引用作为第二参数,强制绑定公式所在文件,返回值不会随活动窗口切换变动,公式如下:
=MID(CELL("filename",A1),SEARCH("[",CELL("filename",A1))+1,SEARCH("]",CELL("filename",A1))-SEARCH("[",CELL("filename",A1))-1)
使用注意事项:
- 公式中
A1可替换为当前工作表内任意单元格引用,无需特殊调整,只要引用对象属于公式所在工作表即可 - 该公式仅在文件已保存到本地后生效,未保存的新建文件无本地存储路径,
CELL()函数无法返回filename字段信息 - 多文件同时打开场景下,每个文件内的公式均绑定自身工作表引用,不会串取其他文件的名称
方案2:VBA适配方案(推荐,完全满足后续VBA调用需求)
纯公式方案依赖单元格存储值,若VBA调用时重算时机异常仍可能出现偏差,最稳定的方式是直接通过VBA内置对象属性获取自身文件名,完全不依赖单元格公式、不受活动窗口切换影响。
首先在工作簿的标准模块中写入如下自定义函数:
Function GetSelfWorkbookName() As String ' 永久返回代码所在工作簿的文件名,不受其他打开文件、活动窗口切换干扰 GetSelfWorkbookName = ThisWorkbook.Name End Function
使用说明:
- 每个需要识别自身文件名的工作簿都存入上述代码,调用函数时只会返回当前文件自身名称,多开无串扰
- 若需要在单元格展示文件名,直接在单元格输入公式
=GetSelfWorkbookName()即可,无需再嵌套MID、CELL类函数 - 后续VBA业务逻辑中需要调用自身文件名时,可直接读取
ThisWorkbook.Name属性,无需读取单元格公式结果,稳定性最高
注意:禁止使用
ActiveWorkbook.Name获取自身文件名,该属性和无第二参数的CELL()函数逻辑一致,返回的是当前激活状态的工作簿名称,多文件切换时同样会出现串值问题,必须使用ThisWorkbook对象,该对象永久指向代码所属的工作簿本身。
内容的提问来源于stack exchange,提问作者DeerSpotter
相关产品推荐
相关产品推荐

