excel(vba)除以零(错误11)调试出现问题



我对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:(

如果x和Y都为0,则通过允许ATn2=1/0选项,您将创建除以零的错误。在Y=0的其他实例中,您已指定Pi或0作为返回值。

也许您应该将1/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

这可能有助于

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 Function

最新更新