1

我已经设置了以下 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

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

您可以在此处下载包含一些数据的示例:http ://www.mediafire.com/view/?rm299bttfsp1v01

4

2 回答 2

1

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

 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))

如果在之后粘贴 For Z = 8 To 16

它不能解决,这就是为什么你没有勇气;)

于 2012-11-20T16:26:51.357 回答
0

难道是你被操作顺序挂断了?看起来您可能在第一个条件周围缺少一组括号......

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
于 2012-11-20T16:26:45.113 回答