打开文件时Excel(2007)函数不计算(自动计算)

打开文件时Excel(2007)函数不计算(自动计算),excel,vba,Excel,Vba,我通过vba创建了一个函数,并使用该函数创建了一个迭代表。我已将工作簿计算设置为自动,并且一切正常,但当我打开excel文件时,包含上述函数的单元格会给我#name error,每次我需要重新计算时都会给我。有办法解决这个问题吗 Public Function FrictionFactor(relativeroughness, reynoldsnumber) 'Dim relativeroughness, reynoldsnumber As Double fNext = 0.0

我通过vba创建了一个函数,并使用该函数创建了一个迭代表。我已将工作簿计算设置为自动,并且一切正常,但当我打开excel文件时,包含上述函数的单元格会给我#name error,每次我需要重新计算时都会给我。有办法解决这个问题吗

Public Function FrictionFactor(relativeroughness, reynoldsnumber)

    'Dim relativeroughness, reynoldsnumber As Double
    fNext = 0.005               ' initial value for f
    fIncrement = 0.005          ' initial step size
    Convergence = 0.000001      ' sets the decimal place accuracy of the result

    Do

        fStart = fNext
        LHSColebrookStart = 1 / (fStart ^ 0.5)
        RHSColebrookStart = -2 * (Log((relativeroughness / 3.7) + (2.51 / (reynoldsnumber * (fStart ^ 0.5)))) / Log(10))
        DifferenceStart = LHSColebrookStart - RHSColebrookStart

        fNext = fStart + fIncrement
        LHSColebrookNext = 1 / (fNext ^ 0.5)
        RHSColebrookNext = -2 * (Log((relativeroughness / 3.7) + (2.51 / (reynoldsnumber * (fNext ^ 0.5)))) / Log(10))
        DifferenceNext = LHSColebrookNext - RHSColebrookNext

        If DifferenceStart * DifferenceNext < 0 Then        ' march f in opposite direction and more slowly
            fIncrement = fIncrement / -10
        ElseIf DifferenceStart * DifferenceNext = 0 Then    ' done
            fIncrement = 0
        End If                                              ' keep marching f in same direction and at same rate

    Loop While Abs(fStart - fNext) > Convergence

    FrictionFactor = fStart
End Function
公共功能摩擦系数(相对厚度,雷诺数)
“昏暗的相对矮小,雷诺德斯努伯是双倍的
fNext=f的0.005'初始值
fIncrement=0.005'初始步长
收敛=0.000001'设置结果的小数点精度
做
fStart=fNext
lHSCLebrookStart=1/(fStart^0.5)
RHSCLebrookStart=-2*(对数((相对足够度/3.7)+(2.51/(雷诺数*(fStart^0.5)))/Log(10))
差异开始=LHSCOLEBROKSTART-RHSCOLEBROKSTART
fNext=fStart+fIncrement
lHSCLebrookNext=1/(fNext^0.5)
RHSCLebrookNext=-2*(对数((相对厚度/3.7)+(2.51/(雷诺数*(fNext^0.5)))/Log(10))
DifferenceNext=lHSCLebrookNext-RHSCLebrookNext
如果DifferenceStart*DifferenceNext<0,则“f”将以相反方向缓慢行进
fIncrement=fIncrement/-10
ElseIf DifferenceStart*DifferenceNext=0然后“完成”
fIncrement=0
如果‘继续以相同的方向和速率前进f’,则结束
Abs时循环(fStart-fNext)>收敛
摩擦系数=fStart
端函数

发生这种情况的常见原因是打开工作簿时未启用宏。检查您的安全设置。

UDF中的代码是什么?我不确定您在函数中发布VBA代码的意思。不,我注释了该部分,因为将它们标注为双精度会导致“范围内重复声明”错误。UDF代表用户定义函数,换句话说,一个由用户创建的函数。宏始终处于启用状态,因此当工作簿打开时,默认情况下它们处于活动状态。自定义项的名称是什么?我不知道您所说的自定义项是什么意思,也不知道如何获得它的名称