【发布时间】:2021-03-15 05:03:49
【问题描述】:
我是 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 :)
【问题讨论】:
-
1/0在任何情况下都无法工作。该代码仅在 y 0 时有效。无论如何,尝试将ATn2(x As Variant, Y As Variant)更改为ATn2(x As Double, Y As Double)。不是为了解决零误差除法... -
And of course I can see that the error is coming from ATn2 = 1 / 0- 所以你知道它发生是因为你打电话给ATn2(0, 0)。所以不要那样做。 -
FaneDuru 和 GSerg,谢谢你们的 cmets。是的,我知道这是问题所在,但是由于我没有编写代码,所以我无法完全按照代码进行操作,而且我也无法理解为什么在 Excel 表中输入数据时不会发生这种情况!仅按用户表单放置数据会导致此问题