VBA是否具有ATan2功能?

时间:2011-02-25 12:35:10

标签: vba

我想在VBA中计算atan2,但我不确定该函数是否存在(甚至在哪里可以找到内置VBA函数的规范列表)。我没有使用Excel,因此无法进行工作表调用。

我自己可以implement atan2,但如果可能,我宁愿避免这样做。

3 个答案:

答案 0 :(得分:6)

要获取列表,请键入您的模块

VBA.Math

或使用对象浏览器。你会发现Atn和Tan等,但名单很短,不包括ATan2。

如果要添加对Excel库的引用,可以使用:

Excel.WorksheetFunction.Atan2

编辑:您可以从允许您添加对Excel库的引用的任何Office应用程序中调用Excel工作表函数。这并不意味着使用Excel或工作表,只是函数。

答案 1 :(得分:5)

正如MarkJ先前所指出的,当X <上述时,上述代码将失败。 0和y = 0。我相信以下内容会一直有效:

Function ArcTan2(X As Double, Y As Double) As Double

Private Const PI As Double = 3.14159265358979
Private Const PI_2 As Double = 1.5707963267949

    Select Case X
        Case Is > 0
            ArcTan2 = Atn(Y / X)
        Case Is < 0
            ArcTan2 = Atn(Y / X) + PI * Sgn(Y)
            If Y = 0 Then ArcTan2 = ArcTan2 + PI
        Case Is = 0
            ArcTan2 = PI_2 * Sgn(Y)
    End Select

End Function

在x和y均为0的情况下,利用Sgn(0)返回0。

答案 2 :(得分:2)

也许这段代码适合你:

Private Const Pi As Double = 3.14159265358979

Public Function Atn2(y As Double, x As Double) As Double

  If x > 0 Then

    Atn2 = Atn(y / x)

  ElseIf x < 0 Then

    Atn2 = Sgn(y) * (Pi - Atn(Abs(y / x)))

  ElseIf y = 0 Then

    Atn2 = 0

  Else

    Atn2 = Sgn(y) * Pi / 2

  End If

End Function