2014-11-22 78 views
1

我正在尋找一種方法來傳遞函數作爲參數。將函數作爲參數傳遞給VBA例如。根發現

說我有根查找算法的功能。該函數找到另一個函數f()的根。 現在我想能夠傳遞任何函數作爲參數,以便我可以使用具有不同函數的rootFinder函數(即,我已定義的n個函數中的任何函數)

如何傳遞f()它是各自的投入作爲一個論點?

這裏是我的代碼來說明這個問題。我用f()和functionInputs作爲佔位符。

Function rootFinder(ByVal lowBound As Double, ByVal upBound As Double, ByVal f() As String, ByVal functionInputs As String) 
'this function uses the 
Dim xmid As Double, xold As Double, tol As Double 

'accuary of algorithm 
tol = 0.001 

If f(lowBound,functionInputs) * f(upBound,functionInputs) > 0 Then 
    MsgBox "choose other bounds" 
Else 
     xold = lowBound 
    Do 
     xmid = (lowBound + upBound)/2 
     If Abs((xmid - xold)/xmid) < tol Then 
      Exit Do 
     End If 
     xold = xmid 
     If f(lowBound,functionInputs) * f(xmid,functionInputs) > 0 Then 
      lowBound = xmid 
     Else 
      upBound = xmid 
     End If 
    Loop 
    rootFinder = xmid 
End If 

End Function 

回答

0

根函數f()函數作爲參數的函數實際上就是您聲明它的字符串數組。我不認爲你可以像你想要的那樣傳遞一個函數作爲參數。爲什麼不使用函數的實際名稱並正常調用它(而不是將它作爲參數傳遞)? (你的算法是非常聰明和光滑,但我希望你得到它的工作!)

+0

我使用了一個類似的函數傳遞一個數組(變體)。嘗試像這樣傳遞它',byval f as variant'。 (事件,如果它是一個字符串數組) – 2014-11-24 22:00:55

相關問題