if-elseif函数没有响应

时间:2016-02-29 01:31:17

标签: vba excel-vba excel

我正在尝试使用宏创建一个工具,以便在选择少数条件时,将显示某个评级。在获得结果之前,有三个标准需要过滤。

例如,如果选择行业(例如Agriculture),然后选择国家(例如Indonesia),然后选择特定比率(例如2.5),将给出1到6的评级(在这种情况下,3)。

我尝试了以下代码,我的评级列下没有任何内容,但没有错误消息。我的代码中是否有任何遗漏导致没有结果的情况?

Private Sub CommandButton1_Click()
    If Range("V4").Value = "A.Agriculture,forestry and fishing" Then

        If Range("W4").Value = All Or ID Or SG Then

            If Range("D4").Value <= 0 Then
                Range("X4").Value = 6
            ElseIf Range("M4").Value > 4 Then
                Range("X4").Value = 5
            ElseIf Range("M4").Value <= 4 And Value > 2 Then
                Range("X4").Value = 4
            ElseIf Range("M4").Value <= 2 And Value > 1 Then
                Range("X4").Value = 3
            ElseIf Range("M4").Value <= 1 And Value > 0 Then
                Range("X4").Value = 2
            ElseIf Range("M4").Value <= 0 Then
                Range("X4").Value = 1
            End If

        ElseIf Range("W4").Value = MY Or TH Then

            If Range("D4").Value <= 0 Then
                Range("X4").Value = 6
            ElseIf Range("M4").Value > 4.5 Then
                Range("X4").Value = 5
            ElseIf Range("M4").Value <= 4.5 And Value > 2 Then
                Range("X4").Value = 4
            ElseIf Range("M4").Value <= 2 And Value > 1 Then
                Range("X4").Value = 3
            ElseIf Range("M4").Value <= 1 And Value > 0 Then
                Range("X4").Value = 2
            ElseIf Range("M4").Value <= 0 Then
                Range("X4").Value = 1
            End If

        End If
    End If
End Sub

2 个答案:

答案 0 :(得分:1)

在最后添加Else个案来处理错误。您的If... ElseIf阻止实际上无法执行任何操作。

另外,因为您正在检查这么多 CASES ,所以这看起来是将If... Then块重新构建为Select... Case块的绝佳机会..

Select [ Case ] testexpression 'stuff here

[ Case expression1 ]

    [ statements ] ]

[ Case Else
    [ elsestatements ] ]
End Select

更多信息 - https://msdn.microsoft.com/en-us/library/cy37t14y.aspx获取信息。

答案 1 :(得分:1)

的If语句未正确形成。此外, If Select Case statement的组合似乎最适合这些多个嵌套条件。这也应该使您的代码模式可读。

If Range("W4").Value = "All" Or Range("W4").Value = "ID" Or Range("W4").Value = "SG" Then

默认情况下,VBA区分大小写,字符串需要用引号括起来;例如All <> "All""ALL" <> "all"。最好使用LCaseUCase函数将"Apples""Apples"进行比较。

Private Sub CommandButton1_Click()
    If Range("V4").Value = "A.Agriculture,forestry and fishing" Then
        Select Case LCase(Range("W4").Value)
            Case "all", "id", "sg"
                If Range("D4").Value <= 0 Then
                    Range("X4").Value = 6
                Else
                    Select Case Range("M4").Value
                        Case Is > 4
                            Range("X4").Value = 5
                        Case 2.01 To 4
                            Range("X4").Value = 4
                        Case 1.01 To 2
                            Range("X4").Value = 3
                        Case 0.01 To 1
                            Range("X4").Value = 2
                        Case Is <= 0
                            Range("X4").Value = 1
                        Case Is > 4
                            Range("X4").Value = 6
                    End Select
                End If
            Case "my", "th"
                If Range("D4").Value <= 0 Then
                    Range("X4").Value = 6
                Else
                    Select Case Range("M4").Value
                        Case Is > 4.5
                            Range("X4").Value = 5
                        Case 2.01 To 4.5
                            Range("X4").Value = 4
                        Case 1.01 To 2
                            Range("X4").Value = 3
                        Case 0.01 To 1
                            Range("X4").Value = 2
                        Case Is <= 0
                            Range("X4").Value = 1
                        Case Is > 4
                            Range("X4").Value = 6
                    End Select
                End If
        End Select
    End If

End Sub

请注意,为了实现大于或小于或等于逻辑,我在 样式的Case语句中添加了一个小的十进制值。