Excel (VBA)IF=TRUE中的布尔条件;尽管如此,他还是胆小鬼
我已经设置了以下IF条件: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 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-这就是为什么你应该考虑在列引用中使用命名范围或常量的原因-帮助很大,特别是在宏越来越大的情况下。哈我很乐意帮忙。