将单元格的公式元素拆分为单独的单元格

时间:2013-06-21 09:03:08

标签: excel vba excel-vba

因此,我有一个公式=A+BAB的单元格是外部电子表格不再打开的外部值。我想知道excel是否记得公式元素以及是否有可能将这些元素值放入其他单元格中。即。

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

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

1 个答案:

答案 0 :(得分:1)

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

假设您的公式引用了一个已关闭的工作簿,并使用简单的求和函数,如:

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

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

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

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访问未打开的工作簿中的数据”我真的不知道如何我只知道它做< / strong>即可。