帮我看看这个vba中为什么会提示子过程或函数未定义,

第一个
Public Function 根数(rng14 As Range, rng15 As Range, rng16 As Range, rng17 As Range)
Select Case rng14.Value
Case "箍筋"
Select Case rng15.Value
Case "100"
根数 = RoundUp((rng16 - 100) / 100) + 1
Case "100/150"
根数 = 2 * (RoundUp((1.5 * rng17 - 50) / 100) + 1) + RoundUp((rng16 - 3 * rng17) / 150) - 1
Case "100/200"
根数 = 2 * (RoundUp((1.5 * rng17 - 50) / 100) + 1) + RoundUp((rng16 - 3 * rng17) / 200) - 1
Case "拉筋"
Select Case rng15.Value
Case "100"
根数 = RoundUp((rng16 - 100) / 200) + 1
Case "100/150"
根数 = RoundUp((rng16 - 100) / 300) + 1
Case "100/200"
根数 = RoundUp((rng16 - 100) / 400) + 1
End Select
End Select
End Function
第二个
Public Function 乘积(rng22 As Range, rng23 As Range, rng24 As Range)
Select Case rng1.Value
Case "顶部通长筋"
乘积 = Product(rng22, rng23, rng24)
Case Else
乘积 = ""
End Select
End Function

'select case就不要嵌套了,看了头疼。。用第一层用if结果多好,就两种情况。。
Public Function æ ¹æ•°(rng14 As Range, rng15 As Range, rng16 As Range, rng17 As Range)
    Select Case rng14.Value
    Case "箍筋"
        Select Case rng15.Value
        Case "100"
            æ ¹æ•° = RoundUp((rng16 - 100) / 100) + 1
        Case "100/150"
            æ ¹æ•° = 2 * (RoundUp((1.5 * rng17 - 50) / 100) + 1) + RoundUp((rng16 - 3 * rng17) / 150) - 1
        Case "100/200"
            æ ¹æ•° = 2 * (RoundUp((1.5 * rng17 - 50) / 100) + 1) + RoundUp((rng16 - 3 * rng17) / 200) - 1
        End Select
    Case "拉筋"
        Select Case rng15.Value
        Case "100"
            æ ¹æ•° = RoundUp((rng16 - 100) / 200) + 1
        Case "100/150"
            æ ¹æ•° = RoundUp((rng16 - 100) / 300) + 1
        Case "100/200"
            æ ¹æ•° = RoundUp((rng16 - 100) / 400) + 1
        End Select
    End Select
End Function
第二个
Public Function ä¹˜ç§¯(rng22 As Range, rng23 As Range, rng24 As Range)
    Select Case rng1.Value
    Case "顶部通长筋"
        ä¹˜ç§¯ = Product(rng22, rng23, rng24)
    Case Else
        ä¹˜ç§¯ = ""
    End Select
End Function追问

怎么感觉没有改变一点东西?第二个我写错了没有定义rng1

追答

你用selcet case嵌套,改动都看不出来,就证明这种写法有多差劲了吧。

函数1的问题,你少了个end select。只改了结构,内容没改,不知道你要干什么。

函数2结构上没问题,没改。

另外,缩进用Tab,不要自己敲空格,层次不明显。

嵌套的时候,你可以选择用if和select case交替进行。

'算法上也可以优化
        Case "100/150"
            æ ¹æ•° = 2 * (RoundUp((1.5 * rng17 - 50) / 100) + 1) + RoundUp((rng16 - 3 * rng17) / 150) - 1
        Case "100/200"
            æ ¹æ•° = 2 * (RoundUp((1.5 * rng17 - 50) / 100) + 1) + RoundUp((rng16 - 3 * rng17) / 200) - 1
可以合并成
    case else
        arr=split(rng15.Value,"/")
        æ ¹æ•° = 2 * (RoundUp((1.5 * rng17 - 50) / arr(0)) + 1) + RoundUp((rng16 - 3 * rng17) / arr(1)) - 1
温馨提示:答案为网友推荐,仅供参考
相似回答