是否需要变量,而不是“或”

时间:2019-01-26 22:11:17

标签: excel vba if-statement

简单的隐藏行在提供多个选项时不起作用

我尝试为范围设置变量,并且存在不匹配的情况

If Range("J178") = "Credit" Or "Debit" Or "Both" Then
    Rows("180").Hidden = False
Else
    Rows("180").Hidden = True
End If

我希望代码能够运行;不是我收到的Run time 13 type mismatch

3 个答案:

答案 0 :(得分:5)

选项1-写出每个条件(区分大小写)

If Range("J178") = "Credit" Or Range("J178") = "Debit" Or Range("J178") = "Both" Then
    Rows("180").Hidden = False
Else
    Rows("180").Hidden = True
End If

选项2-使用工作表的Match(不区分大小写)检查数组

If IsNumeric(application.Match(Range("J178"), Array("Credit","Debit", "Both"), 0)) Then
    Rows("180").Hidden = False
Else
    Rows("180").Hidden = True
End If

选项3-使用“选择大小写”方法(区分大小写)

Select Case Range("J178"),Value
    Case "Credit", "Debit", "Both"
        Rows("180").Hidden = False
    Case Else
        Rows("180").Hidden = True
End Select

选项4-使用修改后的“选择大小写”方法(不区分大小写)

Select Case lcase(Range("J178"),Value)
    Case "credit", "debit", "both"
        Rows("180").Hidden = False
    Case Else
        Rows("180").Hidden = True
End Select

答案 1 :(得分:0)

...选项5(来自@ user10970498)

取消使用If-Then-Else-EndIf构造:

Rows("180").Hidden = (Range("J178") = "Credit" Or Range("J178") = "Debit" Or Range("J178") = "Both")

Rows("180").Hidden = IsNumeric(application.Match(Range("J178"), Array("Credit","Debit", "Both"), 0))

之所以可行,是因为“隐藏”属性是Boolean

答案 2 :(得分:0)

使用Evaluate的替代方法要短一些:

Rows("180").Hidden = Not [or(J178 = "Credit", J178 = "Debit", J178 = "Both")]