#value! error in UDF when doing simple division

时光毁灭记忆、已成空白 提交于 2021-02-10 14:17:17

问题


When doing a simple division problem with some defined variables I am getting the #value error in a UDF. The variables are all defined as doubles.

Apologies in advance as I am a mechanical engineer by trade so my coding is very amateur. I have a design book I use in excel that can end up being many columns long so to avoid this I am trying to code some UDFs to eliminate the all the cells just doing calculations for other cells. With that, I have run into an issue that I have in my calculations as soon as I start to try to divide variables.

In the code, I am not getting an issue until the Cx dim. I noted out everything starting at SFA_Radians and set the function to output each variable. All is good and expected values until reaching Cx. No matter what I do it seems if I am dividing by a variable I get the #VALUE error. Any help is much appreciated.

Function RADEFFECTSF(SFA As Range, FacetAngle As Range, FacetRadius As Range) As Variant

Dim Slope1 As Double
Dim Slope2 As Double
Dim X1 As Double
Dim Y1 As Double
Dim X2 As Double
Dim Y2 As Double
Dim b1 As Double
Dim b2 As Double
Dim SFA_Radians As Double
Dim FacetAngle_Radians As Double
Dim Pi As Double
Dim Cx As Double
Dim Cy As Double
Dim CalcArray() As Double
Dim i As Long


    Pi = Application.WorksheetFunction.Pi()

    ReDim CalcArray(1 To SFA.Cells.Count)
    For i = 1 To SFA.Cells.Count

    SFA_Radians = SFA(i) * Pi / 180
    FacetAngle_Radians = FacetAngle(i) * Pi / 180
    Slope1 = -Tan(SFA_Radians)
    Slope2 = Tan(FacetAngle_Radians)

    X1 = FacetRadius(i) * Sin(SFA_Radians)
    Y1 = FacetRadius(i) * Cos(SFA_Radians)
    b1 = Y1 - (Slope1 * X1)

    X2 = -FacetRadius(i) * Sin(FacetAngle_Radians)
    Y2 = FacetRadius(i) * Cos(FacetAngle_Radians)
    b2 = Y2 - (Slope2 * X2)

    Cx = (b2 - b1) / (Slope1 - Slope2)

    Cy = (Slope1 * (Cx / (b1))) + b1

    CalcArray(i) = Cy - (FacetRadius(i) * Cos(SFA_Radians))
    Next i

    RADEFFECTSF = CalcArray()


End Function

回答1:


I already try your code on some sample data and it works:

SAMPLE

From my experience (I am engineer too), most probably some of the data you are importing on the range aren´t numbers. Check it.

The Slope1 - Slope2 value, you can get 0 so place a condition. Same comment for b1.

Check line by line writing the values you are getting in a additional range to see exactly where it is failing, just keeping remaining code as a comment.F.e.

Function RADEFFECTSF(SFA As Range, FacetAngle As Range, FacetRadius As Range) As Variant

...


    Pi = 4 * Atn(1)

    ReDim CalcArray(1 To SFA.Cells.Count)
    For i = 1 To SFA.Cells.Count

    SFA_Radians = SFA(i) * Pi / 180
    FacetAngle_Radians = FacetAngle(i) * Pi / 180
    Slope1 = -Tan(SFA_Radians)
    Slope2 = Tan(FacetAngle_Radians)

    X1 = FacetRadius(i) * Sin(SFA_Radians)
    CalcArray(i) = X1 'This line is just to return the data X1
    'Y1 = FacetRadius(i) * Cos(SFA_Radians)
    'b1 = Y1 - (Slope1 * X1)

    'X2 = -FacetRadius(i) * Sin(FacetAngle_Radians)
    'Y2 = FacetRadius(i) * Cos(FacetAngle_Radians)
    'b2 = Y2 - (Slope2 * X2)

    'If Slope1 <> Slope2 then
        'Cx = (b2 - b1) / (Slope1 - Slope2)
    'Else
        'Place what it is expected when Slope1=Slope2
    'End If

    'Cy = (Slope1 * (Cx / (b1))) + b1

    'CalcArray(i) = Cy - (FacetRadius(i) * Cos(SFA_Radians))
    Next i

    RADEFFECTSF = CalcArray()


End Function

Check that X1 is the one expected... and so on. Then you can find which one is the code line introducing the unexpected value.

Sorry to give that one as reply, but still I can´t make comments.



来源:https://stackoverflow.com/questions/57664804/value-error-in-udf-when-doing-simple-division

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!