首页 > 解决方案 > 使用外部引用将字符串转换为公式

问题描述

尝试将单元格值(字符串)转换为公式。当单元格值具有以下内容时,它可以正常工作:A1+B1。但是当单元格值(字符串)引用另一个工作簿时,就会得到#Value!单元格中的错误(参见下面 C2 中的示例)。有人知道为什么吗?

在此处输入图像描述

Sub Test()
'Application.Volatile

Dim s As String

's = "=" & Range("C1").Value
s = Range("C1").Value

Range("D1") = Application.Evaluate(s)
'Range("D1").Formula = Application.Evaluate(s)

End Sub

标签: excelvba

解决方案


在 Excel 中计算公式

  • 由于您Application.Volatile的程序中有(尽管注释掉了),我假设您正在尝试创建一个函数来评估一个单元格的公式。

  • 这是您可以构建的基本示例。

编码

Option Explicit

Function evalFormula(FormulaCell As Range) As Variant
    Application.Volatile
    With FormulaCell.Cells(1)
        If Len(.Value) > 0 Then
            evalFormula = Application.Evaluate(.Value)
        Else
            evalFormula = ""
        End If
    End With
End Function
  • 使用您的示例数据,您可以Excel在例如 cell中使用此功能D1

    =evalFormula(C1)
    =IFERROR(evalFormula(C1),"")
    

    并抄下来。

  • 请注意,此评估是在VBA(not Excel) 中执行的,因此您必须,在“公式字符串”中使用逗号 (),尽管您的列表分隔符(如我的情况)可能是分号 ( ;)。

  • 在一种情况下使用Application.Volatile也可能对您有所帮助,但在另一种情况下则无济于事,即如果您使用它,那么当您关闭外部工作簿时,检索到的值只会在重新计算工作表之前存在。如果您不使用它,如果您不更改源单元格中的值,则检索到的值可能一直存在,但值可能无法正确更新。对此进行测试以找出在您的情况下哪个更“方便”。


推荐阅读