调用函数而不调用函数并停止主宏

时间:2015-12-06 20:01:33

标签: vba function excel-vba excel-udf excel

我有这个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

1 个答案:

答案 0 :(得分:4)

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

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

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