1

所以我有一个带有公式的单元格=A+BA并且B是外部电子表格不再打开的外部值。我想知道 excel 是否记得公式元素,以及是否可以将这些元素值输入其他单元格。IE

Row   Formula           Value             
1     =A+B              45
2     =ELEMENT(A1, 1)   10  
3     =ELEMENT(A1, 2)   35 

我无法想象它会那么简单吗?我可以将 vba 中的公式+用作枢轴,但这并不理想,因为它需要重新打开外部电子表格。如果必须重新打开外部电子表格,那么我不必首先尝试分离公式。我希望这是有道理的并且有答案。

4

1 回答 1

1

您的公式已经在访问这些值,以便在打开的工作簿中对它们求和。您不需要重新打开工作簿来评估参考值,也不需要解析活动工作簿中的公式。

假设您的公式引用了一个封闭的工作簿,并带有一个简单的 sum 函数,例如:

='C:\Users\david_zemens\Desktop\[test.xlsx]Sheet1'!$A$1 + ='C:\Users\david_zemens\Desktop\[test.xlsx]Sheet1'!$B$1

您可以在 VBA 中或在工作表上使用字符串函数来解析公式。正如您所注意到的,对于此示例,由+运算符解析就足够了。由于我认为您了解如何执行此操作,因此我的示例未演示如何解析公式。

只要您知道或可以从公式中获取引用,您就应该能够通过公式访问这些单元格的值,或者在 VBA 中使用ExecuteExcel4Macro.

Sub GetValsFromClosedWorkbook()

    Dim fileName As String
    Dim filePath As String
    Dim sheetName As String
    Dim cellref As String
    Dim myFormula As String

    'This example might be one of the two arguments in your "A+B" formula:
    '   'C:\Users\david_zemens\Desktop\[test.xlsx]Sheet1'!A1

    '## Assume you can properly parse the formula to arrive at these:
    fileName = "test.xlsx"
    filePath = "C:\Users\david_zemens\Desktop\"
    sheetName = "Sheet1"
    cellref = "A1"

    'Concatenate in to R1C1 notation
    myFormula = "='" & filePath & "[" & fileName & "]" & sheetName & "'!" & _
      Range(cellref).Address(, , xlR1C1)

    '## First, demonstrate that we can evaluate external references:
    With Range("B1")
        .Value = myFormula
        MsgBox .Value
        .Clear
    End With

    '## Evaluate the formula using ExecuteExcel4Macro:
    MsgBox ExecuteExcel4Macro(Replace(myFormula, "=", vbNullString))

End Sub

附加信息

http://spreadsheetpage.com/index.php/tip/a_vba_function_to_get_a_value_from_a_closed_file/

更新

基于 OP 关于其工作原理的问题(下面的评论),我不确定它在幕后是如何工作的,但这是我的猜测/解释:

首先,请记住,一个单元格可能具有各种属性,如.Text.Value、等.Value2.Formula它们以一种或另一种方式表示其内容。

在计算公式之前,这些值不在活动文件中,此时 Excel 会查询外部文件并返回该Value引用处的当前值。现在活动文件包含该文件Value以及Formula外部文件的引用。

当您继续工作时,活动文件会保留Value和引用,但可能仅在出现提示时更新值。例如,当您重新打开链接的工作簿时,系统会提示您是否“更新外部链接”。

  • 如果您说不,它将使用先前存储的值(仍然保留Formula,它只是不评估它。
  • 如果您说是,它将重新评估公式(以防外部文件中的值已更改)并返回新的.Value

所以,这就是我怀疑正在发生的事情。如果您问“ Excel如何访问未打开的工作簿中的数据”,我真的不知道我是怎么知道它确实如此

于 2013-06-21T14:13:40.947 回答