VB。 如果与多个或内部

我想把这个如果在一个macros,但它总是给我一个错误。 我不知道“或”是否正确使用。

Dim SMAT As String SMAT = "blahblahblah" (...) If Cells(h + 2, 24) <> SMAT Or SMBE Or SMES Or SMFR Or SMGB Or SMGR Or SMRO1 Or SMRO2 Or SMRO3 Or SMDE Then C(j) = Cells(h + 2, 5) 

改用Select Case块:

 Select Case Cells(H + 2, 24).Value Case SMAT, SMBE, SMES, SMFR, SMGB, SMGR, SMR01, SMR02, SMR03, SMDE Case Else c(j) = Cells(H + 2, 5).Value End Select 

或者使用Evaluate()另一种方式,仅用于多种*:

 varConditions = Array(SMAT, SMBE, SMES, SMFR, SMGB, SMGR, SMR01, SMR02, SMR03, SMDE) If Evaluate("ISERROR(MATCH(" & Cells(H + 2, 24).Value & ",{" & _ Join(varConditions, ",") & "},0))") Then c(j) = Cells(H + 2, 5).Value End If 

*当数组包含数字时,此评估方法将工作 – 如果您正在使用string,则必须将每个string包装在其他引号中

这是更正

 Dim SMAT As String SMAT = "blahblahblah" '(...) If Cells(H + 2, 24) <> SMAT Or _ Cells(H + 2, 24) <> SMBE Or _ Cells(H + 2, 24) <> SMES Or _ Cells(H + 2, 24) <> SMFR Or _ Cells(H + 2, 24) <> SMGB Or _ Cells(H + 2, 24) <> SMGR Or _ Cells(H + 2, 24) <> SMRO1 Or _ Cells(H + 2, 24) <> SMRO2 Or _ Cells(H + 2, 24) <> SMRO3 Or _ Cells(H + 2, 24) <> SMDE Then c(j) = Cells(H + 2, 5) End If 

或运算符(Visual Basic)

错误是因为你正在试图像“人”那样向VBA“交谈”,而是or不接受另一个or另一个的参数。 你需要告诉每一个参数, or告诉完整的logical test

 firstCheck = a > b Or b > c firstCheck = Logical_test Or Logical_test