1

我有这个 Sub 循环执行 2 个基本计算,然后我有一个 UDF(见下文)。

我的问题:当我运行Sub BSM_Table它时,它会在这一行调用函数: If Cells(i, 2) > 0 And Cells(i, 3) > 0 Then和子停止。

我猜这是因为这些单元格:Cells(i, 2)并且Cells(i, 3)被函数使用,所以每当这些单元格更改时,函数都会自动重新计算。

有没有办法在我想要的时候调用该函数?

 Sub BSM_Table()

    Dim i As Long
    Dim LastRow As Long, LastRow2 As Long
    Dim Firm_Value As Double, Face_Value As Double, Rate As Double, Volatility_value As Double, Time As Double

    With Sheets("BlackScholeMerton")

    LastRow = Sheets("BlackScholeMerton").Range("B42:B" & Rows.Count).End(xlDown).Row


    For i = 42 To LastRow

    '        If Cells(i, 2) > 0 And Cells(i, 3) > 0 Then
                    Range("E" & i).Value = Range("B" & i).Value + Range("C" & i).Value

                        x = Cells(i, 4) * Cells(i, 2)
                        y = Cells(i, 5)

                        Cells(i, 6) = x / y

    '        End If

    Next i
End sub

我的功能:

Function DefProb(Firm_Value As Double, Face_Value As Double, Rate As Double, Volatility_value As Double, Time As Double) As Double


 Dim t1 As Double, t2 As Double, t3 As Double
 Dim d2 As Double, ta As Double, tb As Double
 Dim V As Double, S As Double, x As Double
 Dim r As Double, ti As Double

S = Firm_Value
x = Face_Value
r = Rate
V = Volatility_value
ti = Time

        t1 = Log(S / x) + (r + V ^ 2 / 2) * ti
        t2 = V * Sqr(ti)
        t3 = Log(S / x) + (r - V ^ 2 / 2) * ti
        d2 = t3 / t2

        DefProb = WorksheetFunction.NormSDist(-d2)

End Function
4

1 回答 1

4

您可以尝试添加.ValueIf Cells(i, 2).Value > 0 And Cells(i, 3).Value > 0 Then

但真正有效的选项是Application.Calculation = xlCalculationManual. 此行停止自动重新计算(使其手动)。

要再次启用它,请使用Application.Calculation = xlCalculationAutomatic

于 2015-12-06T20:10:18.313 回答