Excel (VBA)IF=TRUE中的布尔条件;尽管如此,他还是胆小鬼

Excel (VBA)IF=TRUE中的布尔条件;尽管如此,他还是胆小鬼,excel,vba,boolean,Excel,Vba,Boolean,我已经设置了以下IF条件: If Range("D" & x) + Range("D" & z) = 0 = True And (Range("G" & x) = Range("G" & z)) = True And (IsEmpty(Range("A" & x)) = False) = True And (IsEmpty(Range("C" & x)) = False) = True Then [guts]

我已经设置了以下IF条件:

    If Range("D" & x) + Range("D" & z) = 0 = True And (Range("G" & x) = Range("G" & z)) = True And (IsEmpty(Range("A" & x)) = False) = True And (IsEmpty(Range("C" & x)) = False) = True Then

          [guts]

    End if
我插入了所有的(条件)=True,以便能够在调试时评估每个单独的条件,并且所有这些条件都返回True=True。但它并没有执行布尔运算的精髓。这对我来说毫无意义,但希望你们中的一个人能看到它有什么问题。我创建了一个测试表来运行宏,其中只包含几行数据,我知道这些数据在所有条件下都应该返回TRUE,但它不起作用。我觉得这是一个非常明显的错误


您可以在此处下载一个包含一些数据的示例:

您是否因为操作顺序而挂断了电话?看起来您可能缺少第一个条件周围的一组括号

If (Range("D" & x) + Range("D" & z) = 0) = True And (Range("G" & x) = Range("G" & z)) = True And (IsEmpty(Range("A" & x)) = False) = True And (IsEmpty(Range("C" & x)) = False) = True Then

      [guts]

End if

是不是因为你被行动令挂了电话?看起来您可能缺少第一个条件周围的一组括号

If (Range("D" & x) + Range("D" & z) = 0) = True And (Range("G" & x) = Range("G" & z)) = True And (IsEmpty(Range("A" & x)) = False) = True And (IsEmpty(Range("C" & x)) = False) = True Then

      [guts]

End if

重新格式化并制作了一个可复制的示例:

 Public Sub demo()
  Dim x, Z As Long

  x = 1
  Z = 1

  If Range("D" & x) + Range("D" & Z) = 0 = True And _
  (Range("G" & x) = Range("G" & Z)) = True And _
  (IsEmpty(Range("A" & x)) = False) = True And _
  (IsEmpty(Range("C" & x)) = False) = True Then

          Debug.Print "[guts]"

    End If

End Sub
如果A1=12和C1=12,它对我有效(例如)

但我会这样写:

Public Sub demo()
  Dim x, Z As Long

  x = 1
  Z = 1

  'to confirm
  Debug.Print Range("D" & x) + Range("D" & Z) = 0
  Debug.Print Range("G" & x) = Range("G" & Z)
  Debug.Print Not IsEmpty(Range("A" & x))
  Debug.Print Not IsEmpty(Range("C" & x))

  If Range("D" & x) + Range("D" & Z) = 0 And _
     Range("G" & x) = Range("G" & Z) And _
     Not IsEmpty(Range("A" & x)) And _
     Not IsEmpty(Range("C" & x)) Then

          Debug.Print "[guts]"
  End If

End Sub
编辑

您可以使用以下代码轻松地进行测试:

  Debug.Print Range("D" & x) + Range("D" & Z) = 0 And _
              Range("G" & x) = Range("G" & Z) And _
              Not IsEmpty(Range("A" & x)) And _
              Not IsEmpty(Range("C" & x))
如果Z=8到16,则在
之后粘贴


它不符合事实,这就是你没有勇气的原因;)

对此进行了重新格式化,并制作了一个可复制的示例:

 Public Sub demo()
  Dim x, Z As Long

  x = 1
  Z = 1

  If Range("D" & x) + Range("D" & Z) = 0 = True And _
  (Range("G" & x) = Range("G" & Z)) = True And _
  (IsEmpty(Range("A" & x)) = False) = True And _
  (IsEmpty(Range("C" & x)) = False) = True Then

          Debug.Print "[guts]"

    End If

End Sub
如果A1=12和C1=12,它对我有效(例如)

但我会这样写:

Public Sub demo()
  Dim x, Z As Long

  x = 1
  Z = 1

  'to confirm
  Debug.Print Range("D" & x) + Range("D" & Z) = 0
  Debug.Print Range("G" & x) = Range("G" & Z)
  Debug.Print Not IsEmpty(Range("A" & x))
  Debug.Print Not IsEmpty(Range("C" & x))

  If Range("D" & x) + Range("D" & Z) = 0 And _
     Range("G" & x) = Range("G" & Z) And _
     Not IsEmpty(Range("A" & x)) And _
     Not IsEmpty(Range("C" & x)) Then

          Debug.Print "[guts]"
  End If

End Sub
编辑

您可以使用以下代码轻松地进行测试:

  Debug.Print Range("D" & x) + Range("D" & Z) = 0 And _
              Range("G" & x) = Range("G" & Z) And _
              Not IsEmpty(Range("A" & x)) And _
              Not IsEmpty(Range("C" & x))
如果Z=8到16,则在
之后粘贴


它不符合事实,这就是你没有勇气的原因;)

如果您可以上传示例数据-就这样做-它总是有帮助的;)好吧我马上就来。是不是
范围(“C”
错误了?因为在你的文件中,这个列是空的。如果你可以上传样本数据-就这样做-它总是有帮助的;)好的!我马上就把它弄上来。它能是
范围(“C”吗
错误?因为在您的文件中,此列是空的。对不起,但它不起作用。您能看一下我上载的示例吗?我感谢您的帮助。对不起,但它不起作用。您能看一下我上载的示例吗?我感谢您的帮助。哦,太好了。我不知道您可以这样格式化条件。但它仍然不起作用。如果你能看看我上传的样本,我会非常感激。看看它-你的情况不符合真实情况-查看我的编辑。哦,亲爱的。多亏了你,我发现了错误。今天早些时候,我对包含数据的列进行了更改,但我忘了更正列字母I最后一个条件。我知道这是一个愚蠢的错误。我想,看同样的东西几个小时会让你对细节视而不见。谢谢!@KHH-这就是为什么你应该考虑在列引用中使用命名范围或常量的原因-帮助很大,特别是在宏越来越大的情况下。很乐意帮忙。哦,太好了。我不认识你可以设置这样的条件。但它仍然不起作用。如果您能尝试查看我上载的示例,我将不胜感激。查看它-您的条件无法解析为true-请参阅我的编辑。哦,天哪。感谢您,我发现了错误。今天早些时候,我对包含数据的列进行了更改,并且我忘了在最后一个条件中更正列字母。我知道这是一个愚蠢的错误。我想,看同样的东西几个小时会让你对细节视而不见。谢谢!@KHH-这就是为什么你应该考虑在列引用中使用命名范围或常量的原因-帮助很大,特别是在宏越来越大的情况下。哈我很乐意帮忙。