2016-03-08 102 views
1

我在使用If NOT Like代码时遇到了一些问题。LIKE对应的语句

下面是有它的编码部分。似乎编码正在带来第二条记录,其中有铁路在被查看的字段中,但没有一条记录在此之前或之后。

实际上,它应该带来在该领域任何地方都不含有铁轨的记录,但它也不会这样做。任何反馈意见。

Set rngData = Intersect(wsData.UsedRange, wsData.Range("A:K")) 

    j = 1 
    rngData.Rows(1).Copy Destination:=wsGalreq.Cells(j, 1) 

    For i = 2 To rngData.Rows.Count 
     If Not rngData.Cells(i, 11).Value = "SUPPLIER A" And rngData.Cells(i, 6).Value Like "*RAIL*" Then 
      j = j + 1 
      rngData.Rows(i).Copy Destination:=wsGalreq.Cells(j, 1) 
     End If 
    Next 
+0

这里的[运算符优先级表(https://msdn.microsoft.com/en-us/library/office/gg278455.aspx)在VBA以供将来参考 – barrowc

回答

10

你应该用括号或逻辑来明确说明你是什么之后。

If Not rngData.Cells(i, 11).Value = "SUPPLIER A" And rngData.Cells(i, 6).Value Like "*RAIL*" Then 

相同

If Not A And B 

当它出现你想要

If Not A And Not B 
+0

,也可能是'如果没有( A和B)' –

+0

完美@Alex McMillan,我可以使用: 如果A和B不是我想要的选择供应商A记录,但不包括描述中包含“铁路”的记录。谢谢! – Danny

+0

很好解释。 – brettdj

2

由于VBA doesn't short circuit最好是写逻辑如下文更可能条件第一(所以冗余的第二次测试没有运行)。

所以

If Not A Then If Not B

或者你的情况;

If Not rngData.Cells(i, 11).Value = "SUPPLIER A" Then 
    If Not rngData.Cells(i, 6).Value Like "*RAIL*" Then 
      j = j + 1 
      rngData.Rows(i).Copy Destination:=wsGalreq.Cells(j, 1) 
    End If 
End If