2016-03-08 70 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