Function 在VBA函数中使用命名单元格

Function 在VBA函数中使用命名单元格,function,vba,named-ranges,Function,Vba,Named Ranges,我有一个工作表,其中定义了某些单元格的名称。这些单元格将在函数中使用,我使用它们的名称来调用它们 但是,当我使用Excel调用函数时,我得到0作为函数的返回值,就好像这些名称没有链接或具有0值一样 下面是我写的代码。“Sum_Len_1”、“L_W_2”和“L_W_1”是我给源单元格起的名字 Function min_w(depth) If depth < Sum_Len_1 Then min_w = L_W_1 * 0.868 * depth / 1000

我有一个工作表,其中定义了某些单元格的名称。这些单元格将在函数中使用,我使用它们的名称来调用它们

但是,当我使用Excel调用函数时,我得到0作为函数的返回值,就好像这些名称没有链接或具有0值一样

下面是我写的代码。“Sum_Len_1”、“L_W_2”和“L_W_1”是我给源单元格起的名字

Function min_w(depth)

    If depth < Sum_Len_1 Then
        min_w = L_W_1 * 0.868 * depth / 1000
    Else
        min_w = L_W_1 * 0.868 * Sum_Len_1 / 1000 + L_W_2 * 0.868 * (depth - Sum_Len_1) / 1000
    End If

End Function
功能最小值(深度)
如果深度

如何解决这个问题?

如果你只写
min\u w=L\u w\u 1*0.868*depth/1000
vba认为
L\u w\u 1
它是变量(值为0的类型变量)。 您必须像这样执行
范围(“L_W_1”)。值
以引用命名单元格

如果将其更改为:

Function min_w(depth As Long)
If depth < Range("SUM_LEN_1").Value Then
    min_w = Range("L_W_1").Value * 0.868 * depth / 1000
Else
    min_w = Range("L_W_1").Value * 0.868 * Range("SUM_LEN_1").Value / 1000 + Range("L_W_2").Value * 0.868 * (depth - Range("SUM_LEN_1").Value) / 1000
End If
End Function
功能最小值(深度与长度相同)
如果深度<范围(“总和长度1”)。则
最小宽度=范围(“最小宽度1”)。值*0.868*深度/1000
其他的
最小值=范围(“长度1”).值*0.868*范围(“长度1”).值/1000+范围(“长度2”).值*0.868*(深度-范围(“长度1”).值)/1000
如果结束
端函数

您可以将它们放在括号中,将它们标记为一个范围:
[Sum_Len_1].Value[L_W_2].Value和[L_W_1].Value

你能举例说明深度、L_W_1、L_W_2和Sum_Len_1可以有哪些值?L_W_1=105 L_W_2=96 Sum_Len_1=37