我是VBA的新手,我有一个Excel工作表,其中运行着一些宏。在其中一个选项卡中,用户可以输入数据,然后按下工作表上的命令按钮即可获得答案。现在我想通过用户表单输入数据。我已经成功地创建了一个用户表单,它可以完美地从Excel工作表中读取/写入数据。我现在面临的问题是,只要我在用户表单中输入数据,命令按钮(连接到宏)就会给我“被零分割”的错误,它有点破坏了Excel文件,我需要用我拥有的备份文件来替换它!我不明白为什么通过用户表单输入数据会导致这个问题。
当我在Excel工作表上输入数据(而不是通过用户表单)时,一切都很好!这是我得到错误的部分:
Function ATn2(x As Variant, Y As Variant) As Double
If x = 0 Then
If Y = 0 Then
ATn2 = 1 / 0
ElseIf Y > 0 Then
ATn2 = Pi / 2
Else
ATn2 = -Pi / 2
End If
ElseIf x > 0 Then
If Y = 0 Then
ATn2 = 0
Else
ATn2 = Atn(Y / x)
End If
Else
If Y = 0 Then
ATn2 = Pi
Else
ATn2 = (Pi - Atn(Abs(Y) / Abs(x))) * Sgn(Y)
End If
End If
End Function当然,我可以看到错误来自ATn2 = 1 / 0 :)
发布于 2020-12-03 16:00:16
如果x和y都为0,则允许选择ATn2 =1/0,这样就产生了除以零的错误。在Y=0的其他实例中,您已经指定Pi或0作为返回值。
也许您应该将I/0更改为其他值。
Function ATn2(x As Variant, Y As Variant) As Double
If x = 0 Then
If Y = 0 Then
' // BOTH ARGUMENTS ARE ZERO
MsgBox ("Values are both zero and cannot be calculated")
Exit Function
ElseIf Y > 0 Then
ATn2 = Pi / 2
Else
ATn2 = -Pi / 2
End If
ElseIf x > 0 Then
If Y = 0 Then
ATn2 = 0
Else
ATn2 = Atn(Y / x)
End If
Else
If Y = 0 Then
ATn2 = Pi
Else
ATn2 = (Pi - Atn(Abs(Y) / Abs(x))) * Sgn(Y)
End If
End If
End Function发布于 2020-12-03 16:05:39
这可能会有所帮助
Public Function ATan2(ByVal ipY As Double, ByVal ipX As Double) As Double
Dim myTheta As Double
If (Abs(ipX) < 0.0000001) Then
If (Abs(ipY) < 0.0000001) Then
myTheta = 0#
ElseIf (ipY > 0#) Then
myTheta = 1.5707963267949
Else
myTheta = -1.5707963267949
End If
Else
myTheta = Atn(ipY / ipX)
If (ipX < 0) Then
If (ipY >= 0#) Then
myTheta = 3.14159265358979 + myTheta
Else
myTheta = myTheta - 3.14159265358979
End If
End If
End If
ATan2 = myTheta
End Functionhttps://stackoverflow.com/questions/65121612
复制相似问题