因此,我有一个公式=A+B
,A
和B
的单元格是外部电子表格不再打开的外部值。我想知道excel是否记得公式元素以及是否有可能将这些元素值放入其他单元格中。即。
Row Formula Value
1 =A+B 45
2 =ELEMENT(A1, 1) 10
3 =ELEMENT(A1, 2) 35
我无法想象它那么简单吗?我可以使用+
作为支点在vba中分离出公式,但这并不理想,因为它需要重新打开外部电子表格。如果必须重新打开外部电子表格,那么我首先不需要尝试分离公式。我希望这是有道理的并且有答案。
答案 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>即可。