2013-06-21 219 views
1

所以我有一个单元格,公式为=A+B,AB是外部值,外部电子表格不再打开。我想知道如果excel记住公式元素,并且是否有可能将这些元素值转换为其他单元格。即将单元格的公式单元拆分为单独的单元格

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

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

+1

请参阅下面的答案。如果你可以解析公式,你当然可以使用'ExecuteExcel4Macro'来评估外部引用**,而不需要**重新打开外部工作簿。 –

回答

1

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

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

='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中访问一个未打开的工作簿中的数据”我真的不知道如何我只是知道它确实是

+0

看起来我太信赖了!这是优秀的大卫。我真的不认为这会像使用这个参考那么简单。 excel如何做到这一点呢?由于之前被使用或者是否存在其他一些欺骗,这些值是否已经在文件中? – Rapid

+1

我会用我认为是解释的东西来更新我的答案:) –

相关问题