Excel 2016粘贴值到含UDF的原单元格出现#N/A错误如何解决
问题原因
该现象是Excel 2013及后续版本的已知行为,源于重算引擎的逻辑更新:
Office 2010及更早版本中,粘贴值到原单元格的操作不会触发单元格内UDF的重算,因此返回值正常;2013及之后版本执行该操作时,Excel会先清空原单元格内容再写入静态值,清空动作会触发UDF重算,此时UDF的调用上下文被临时标记为无效,未做兼容处理的UDF就会返回#N/A。粘贴到其他单元格时不会触发原单元格的UDF重算,因此值显示正常。
解决方法
分为无需修改代码的临时方案和修改UDF的永久方案两类:
临时方案(无需修改UDF)
- 复制目标单元格后,先粘贴到任意空白单元格,再将该空白单元格的内容剪切粘贴回原位置即可
- 操作前进入「文件-选项-公式」,将计算选项改为手动,完成粘贴操作后再改回自动,即可规避重算触发的错误
永久方案(修改UDF代码)
在UDF代码开头增加两处兼容配置即可,参考代码框架如下:
Function myFunc() ' 标记函数为非易失性,仅当参数变动时触发重算 Application.Volatile False ' 增加调用上下文校验,上下文无效时直接返回单元格已有值 On Error Resume Next If TypeName(Application.Caller) <> "Range" Then myFunc = Application.Caller.Value Exit Function End If ' 原有函数逻辑写在此处 ' ... End Function
内容的提问来源于stack exchange,提问作者AliM67
相关产品推荐
相关产品推荐

