2009-05-23 226 views
3

我在工作表中的單元格範圍內有一個公式,這個公式的計算結果是數值。如何從傳入函數的範圍獲取VBA中的數值?如何使用VBA從Excel中的公式獲取單元格值?

比方說,在工作表中的前10行A列中包含RAND(),我傳遞一個作爲參數傳遞給我的功能...

public Function X(data as Range) as double 

    for c in data.Cells 
     c.Value 'This is always Empty 
     c.Value2 'This is always Empty 
     c.Formula 'This contains RAND() 
    next 

end Function 

我打電話從細胞功能.. 。

=X(a1:a10) 

我該如何獲得單元值,例如0.62933645?

Excel 2003中,VB6

+0

我做了一些快速的VBA代碼,並得到了單元格Rand()的值;沒問題。也許發佈更多的代碼,看看還有什麼事情? – 2009-05-23 12:38:39

+0

理查德,沒有更多的代碼,就是這樣... 我想要做的就是獲取單元格值,它們都是「空的」 – Simon 2009-05-23 12:40:12

+0

也請說明在哪些條件下使用該函數。特別是,在同一張表單上的單元格在使用它時有些活動,例如對話框或某些Excel功能(某些Range方法在某些情況下在Excel中不起作用)。 – GSerg 2009-05-23 13:17:31

回答

5

從VBA(Excel 2003中)運行時,下面的代碼工作對我來說:

Public Function X(data As Range) As Double 

For Each c In data.Cells 
    a = c.Value  'This works 
    b = c.Value2 'This works too (same value) 
    f = c.Formula 'This contains =RAND() 
Next 

End Function 

a和b是相同的,等於什麼我傳遞(其中是其中有Rand()的單元格的範圍)。我不確定這裏還有什麼事情發生。

啊哈!你需要設置X,否?我不確定你期望這個函數做什麼,但是你需要將X(函數的名字)設置爲你想返回的值。添加此行:

X = a 
1

我無法使用您發佈的佈局複製問題。我發現你的發佈代碼中有一些語法錯誤(例如:「for」應該是「for each」)。但是,當我把= RAND()在A1:A10和= X(A1:A10)我得到了回報只是這個罰款:

Public Function X(data As Range) As Double 
    Dim c As Excel.Range 
    Dim sum As Double 
    For Each c In data.Cells 
     sum = sum + c.Value 
    Next 
    X = sum 
End Function 

然而,僅僅一個擴大多了幾分幾的其他問題你反對。您可以評估公式結果,像這樣:

Public Function X(data As Range) As Double 
    Dim c As Excel.Range 
    Dim sum As Double 
    For Each c In data.Cells 
     sum = sum + Excel.Evaluate(c.Formula) 
    Next 
    X = sum 
End Function 

但一般來說,你不會想,因爲這基本上是兩次計算的值相同。

0

請確保您在請求值之前進行計算。

要在這種狀態下,你必須強制計算的值將是可用之前加快宏類似下面的往往是預製..

'Set Reasonable default 
Application.CutCopyMode = False 
Application.ScreenUpdating = False 
Application.Interactive = False 
Application.Calculation = xlCalculationManual 

Public Function X(data As Range) As Double 
    'You may need the following as well 
    'Application.Calculate 
    Dim c As Range 
    For Each c In data.Cells 
     c.Calculate 
     c.Value 'This is now has a value 
     c.Value2 'This is now has a value 
     c.Formula 'This contains RAND() 
    Next 
End Function 
相關問題