VBA是否具有ATan2功能?

VBA是否具有ATan2功能?,vba,Vba,我想在VBA中计算atan2,但我不确定该函数是否存在(甚至不确定在哪里可以找到内置VBA函数的规范列表)。我没有使用Excel,因此无法调用工作表 我自己可以atan2,但如果可能的话,我宁愿避免这样做。要获得列表,请在模块中键入 VBA.Math 或者使用对象浏览器。你会发现Atn和Tan等,但列表很短,不包括ATan2 如果要添加对Excel库的引用,可以使用: Excel.WorksheetFunction.Atan2 编辑:您可以从任何Office应用程序调用Excel工作表函数,

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


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

要获得列表,请在模块中键入

VBA.Math
或者使用对象浏览器。你会发现Atn和Tan等,但列表很短,不包括ATan2

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

Excel.WorksheetFunction.Atan2

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

也许此代码适合您:

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
Private Const Pi As Double=3.14159265358979
公共函数Atn2(y为双精度,x为双精度)为双精度
如果x>0,则
Atn2=Atn(y/x)
ElseIf x<0则
Atn2=Sgn(y)*(Pi-Atn(Abs(y/x)))
如果y=0,则
Atn2=0
其他的
Atn2=Sgn(y)*Pi/2
如果结束
端函数

正如MarkJ前面指出的,当X<0且y=0时,上述代码将失败。我相信以下措施将一直有效:

函数ArcTan2(X为Double,Y为Double)为Double
专用常量PI为双精度=3.14159265358979
专用常量PI_2作为双精度=1.5707963267949
选择案例X
大小写>0
ArcTan2=Atn(Y/X)
病例<0
ArcTan2=Atn(Y/X)+PI*Sgn(Y)
如果Y=0,则ArcTan2=ArcTan2+PI
大小写为=0
ArcTan2=PI_2*Sgn(Y)
结束选择
端函数
在x和y都为0的情况下,它利用Sgn(0)返回0的优势。

您可以使用

Application.Atan2

我没有使用任何Office产品,我不能假设Office将与承载我的VBA宏的产品一起安装。在这种情况下,您可能仅限于VBA.Math函数,并且它们不包括ATan2。如果不是机密信息,您正在使用哪些包括VBA但不属于Office系列的内容?它可能有一组扩展的函数,因为每个MS应用程序略有不同。在VBA
Sgn(0)
中为零。如果上述代码采用标准顺序,则不确定上述代码是否给出了正确答案。有些语言似乎在交换X和Y的输入。请参阅