【问题标题】:Maximum Amount Of "And" Statements In IFIF 中“与”语句的最大数量
【发布时间】:2014-01-11 22:33:32
【问题描述】:

我正在尝试使用 5 个条件对“IF”语句进行测试,如果我只使用 3 个条件进行测试,则代码可以正常工作,但是一旦我添加任何额外条件,它就会停止工作。没有错误,它只是停止。

If Me.Count_Criteria_5.Value <> "Any" Then

    For i = RowNum To RowNumEnd
        If ws.Cells(i, CR1).Value = V_1 And ws.Cells(i, CR2).Value = V_2 And _
        ws.Cells(i, CR3).Value = V_3 And ws.Cells(i, CR4).Value = V_4 And _
        ws.Cells(i, CR5).Value = V_5 Then
        ws.Range("A" & i & ":AM" & i).Copy

        ps.Activate
        'find first empty row in database
        emR = ps.Cells.Find(What:="*", SearchOrder:=xlRows, _
        SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1
        ps.Range("A" & emR & ":AM" & emR).PasteSpecial

    End If
    Next i
Exit Sub

End If ' End 5 Criteria Loop

我错过了什么吗?

注意:wsps 被定义为工作表

更新

根据这个问题的 cmets,问题似乎是所使用的标准。这是因为对复选框进行了测试。选中的复选框返回 TRUE 的值。但是在使用此代码进行测试时,它无法识别工作表上的“TRUE”与 V_# 中的“TRUE”相同

有人有什么想法吗?

【问题讨论】:

  • (不知何故,您的条件是错误的——如果“表达式中的运算符数”有上限,则不是五个。)
  • 嗨@minitech,感谢您的回复,但我的条件不能不正确,因为系统适用于 3 以下的任何内容。即使我将适用于 3 的所有标准设置为与 5 相同(如搜索设置为“1”的所有五个条件)它仍然无法正常工作
  • “只是停止”是指“Then.. End If block 中的语句不执行”吗?如果你这样做了,那么 minitech 就出现了,你就有一个逻辑问题。理论上,条件运算符的数量没有限制,就像他说的那样,即使是 5 个也不会。我建议您检查您的 V_1...5 值,尤其是值 V_4 和 V_5。还要检查 CR1..5 值。
  • 如果您使用 3 次测试来测试条件,但使用条件 3,4 和 5 而不是 1,2 和 3 会发生什么?
  • "...但我的条件不可能不正确..." -- 我不相信你。

标签: vba loops if-statement


【解决方案1】:

在评估之前使用它。

Msgbox "CR1 = " & ws.Cells(i, CR1) & "  V_1 = " & V_1 & vbCrLf & _
          "CR2 = " & ws.Cells(i, CR2) & "  V_2 = " & V_2 & vbCrLf & _
          "CR3 = " & ws.Cells(i, CR3) & "  V_3 = " & V_3 & vbCrLf & _
          "CR4 = " & ws.Cells(i, CR4) & "  V_4 = " & V_4 & vbCrLf & _
          "CR5 = " & ws.Cells(i, CR5) & "  V_5 = " & V_5 "

大大简化调试。

编辑:试试这个!

If ws.Cells(i, CR1).Value = V_1 And ws.Cells(i, CR2).Value = V_2 And _
        ws.Cells(i, CR3).Value = V_3 And _
        (ws.Cells(i, CR4).Value = V_4 or ws.Cells(i, CR4).Value = "TRUE") And _
        (ws.Cells(i, CR5).Value = V_5 or ws.Cells(i, CR5).Value = "TRUE") Then

【讨论】:

  • 只是一个旁注,.Value 几乎没有用,因为默认情况下,如果您在.Cells(x, y) 之后将其留空,则会使用它
  • 另外,为了避免每次都重复ws.,请考虑在If 之前写ws.Activate(或者只是确保它是ActiveSheet)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 2020-08-13
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
相关资源
最近更新 更多