2013-07-05 29 views
0

目前有一個宏,其中有很多If語句通過每一行並測試某些條件。需要添加到每條if語句中的條件之一如下:如果c1(其中Dim'd作爲範圍)=「#N/A」)。問了幾個人後,我終於得到了正確的代碼行我的每個if語句之前添加爲另一條件是:使用IF語句和#N/A?

If CVErr(cl.Value) = CVErr(xlErrNA) And 

不幸的是這樣下去搞亂當cl.Value是一件不「# N/A」。我想看看是否有一種方法可能從宏開始,比如Do While或者通過測試來啓動它,看看cl.Value是否爲「#N/A」,如果它是通過所有其他IF聲明,如果不去下一個單元格。請指教。謝謝你的幫助。

這裏只是一個簡單的例子/偷看4 If語句,我已經添加了上面這行測試「#N/A」,它會引發錯誤(說13:類型不匹配)。

For Each cl In range("A2", range("A" & Rows.count).End(xlUp)) 


If CVErr(cl.Value) = CVErr(xlErrNA) And _ 
cl.Offset(, 11).Value = "Bond Deals" And cl.Offset(, 2).Value Like "*CLO*" Then 
     cl.Value = "CLO" 
End If 

If CVErr(cl.Value) = CVErr(xlErrNA) And cl.Offset(, 11).Value = "Bond Deals" And cl.Offset(, 12).Value Like "BCC*" Then 
     c1.Value = "CLO" 
End If 

If CVErr(cl.Value) = CVErr(xlErrNA) And _ 
cl.Offset(, 11).Value = "Bond Deals" And cl.Offset(, 14).Value Like "*CLO*" Then 
     c1.Value = "CLO" 
End If 

If CVErr(cl.Value) = CVErr(xlErrNA) And _ 
cl.Offset(, 11).Value = "Bond Deals" And cl.Offset(, 15).Value Like "*CLO*" Then 
     c1.Value = "CLO" 
End If 

回答

1

#N/A是工作表中的特殊錯誤值,而不是字符串。

你可以用下面的測試吧:

If WorksheetFunction.Iserror(cl.Offset(0, 0).Value) ... 

,將返回TRUE任何錯誤。如果您想專門測試#N/A,請使用ISNA(...)功能做同樣的事情。

關於您修改的問題,如果我理解正確,爲什麼不能將您的其他IF納入NA IF?

For ... 
    If (CVErr(cl..Value) eq CVErr(xlErrNA) Then 
     If .... Then 
      do_something 
     End If 
     If .... Then 
      do_another_thing 
     End If 
    End If 
Next 

請注意,EQ的代碼草圖的第二行應該是上了等號。這是寫在我的手機上,這沒有該鍵:(

+3

它可以這樣做'如果CVErr(cl.Value)= CVErr(xlErrNA)然後'但沒有顯着差異 –

+0

嘿,感謝您的幫助,我試着在每個If語句前添加這個,並且在cl.Value不是「#N/A」時意識到它不會工作。我想看看是否有一種方法可能從宏開始例如Do While或者通過測試來檢查cl.Value是否爲「#N/A」並且是否通過所有其他IF語句並且如果不是轉到下一個單元格,請啓動它。 –

+0

編輯OP來包含新問題 –