2013-06-21 218 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

我會用我認爲是解釋的東西來更新我的答案:) –

相關問題