首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >excel (vba)除以零(错误11)调试问题

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

Stack Overflow用户
提问于 2020-12-03 15:34:13
回答 2查看 92关注 0票数 0

我是VBA的新手,我有一个Excel工作表,其中运行着一些宏。在其中一个选项卡中,用户可以输入数据,然后按下工作表上的命令按钮即可获得答案。现在我想通过用户表单输入数据。我已经成功地创建了一个用户表单,它可以完美地从Excel工作表中读取/写入数据。我现在面临的问题是,只要我在用户表单中输入数据,命令按钮(连接到宏)就会给我“被零分割”的错误,它有点破坏了Excel文件,我需要用我拥有的备份文件来替换它!我不明白为什么通过用户表单输入数据会导致这个问题。

当我在Excel工作表上输入数据(而不是通过用户表单)时,一切都很好!这是我得到错误的部分:

代码语言:javascript
复制
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 :)

EN

回答 2

Stack Overflow用户

发布于 2020-12-03 16:00:16

如果x和y都为0,则允许选择ATn2 =1/0,这样就产生了除以零的错误。在Y=0的其他实例中,您已经指定Pi或0作为返回值。

也许您应该将I/0更改为其他值。

代码语言:javascript
复制
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
票数 -1
EN

Stack Overflow用户

发布于 2020-12-03 16:05:39

这可能会有所帮助

代码语言:javascript
复制
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
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65121612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档