![在一台电脑上以编程方式更新单元格公式,在另一台电脑上显示#Name](https://linux22.com/image/1308157/%E5%9C%A8%E4%B8%80%E5%8F%B0%E7%94%B5%E8%84%91%E4%B8%8A%E4%BB%A5%E7%BC%96%E7%A8%8B%E6%96%B9%E5%BC%8F%E6%9B%B4%E6%96%B0%E5%8D%95%E5%85%83%E6%A0%BC%E5%85%AC%E5%BC%8F%EF%BC%8C%E5%9C%A8%E5%8F%A6%E4%B8%80%E5%8F%B0%E7%94%B5%E8%84%91%E4%B8%8A%E6%98%BE%E7%A4%BA%23Name.png)
我们有很多电子表格,需要升级一个重要的插件。
此次变更将涉及将旧公式转换为新公式。由于名称和参数数量均不相同,因此变更并非一帆风顺。
因此,我们正在研究如何自动完成此操作。新插件仅在新电脑上可用。我的工作站上没有安装它。
假设旧公式是旧页和新的新
我的代码将会做这样的事情:
ws.Cells.Item(cell_r, cell_c).Formula = "=newf(A1, B2, """CCC""")"
然后我将调用workbook.saveAs()
保存到一个新的工作簿
现在,当我在新电脑上打开新工作簿时,我可以看到单元格变为“#NAME”。如果我选择单元格,按 F2 然后按 F9,它将按预期工作。但这违背了自动化的整个目的。
我的理论是:当我在旧电脑中将单元格设置为新公式时,由于 excel COM 对象不知道新插件的存在,因此它会将单元格标记为某种无效的内部状态。即使在新电脑中打开它也不会刷新。
怎样才能修复它?
答案1
无论如何,由于您正在修改工作簿的电脑上不是有了新功能,工作簿一旦是在具有新功能的电脑上,以便他们真正使用新功能。您可能需要仔细检查,当您在新电脑上打开新工作簿时,Excel 计算是否设置为自动。
如果您不希望工作表抱怨名称无效,您可以在计算机上的插件中创建一个虚拟的新函数。
Public Function NewF(r As Range, r2 As Range, s As String) As Boolean
NewF = OldF(r, s)
End Function
答案2
最简单的解决方案是打开新的工作簿并按CTRL-ALT-F9强制对整个事情进行全局重新计算。我认为你只需要做一次。