我正在尝试使用宏创建一个工具,以便在选择少数条件时,将显示某个评级。在获得结果之前,有三个标准需要过滤。
例如,如果选择行业(例如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
答案 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"
。最好使用LCase和UCase函数将"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语句中添加了一个小的十进制值。