2012-07-09 9 views
5

Tôi muốn kiểm tra giá trị #N/A thành excel với VBA. Vì vậy, sau khi một số nghiên cứu, tôi đã thực hiện mã này:kiểm tra giá trị "# N/A" trong vba thành một phạm vi

Set MyTab = Range(name) 
If (Not IsEmpty(MyTab.value)) And (MyTab(i, j).value <> CVErr(xlErrNA)) Then 
    Call BuildRequest(False, id, MyTab, i, j) 
End If 

Nhưng khi nó truyền MyTab(i, j).value <> CVErr(xlErrNA) Tôi có một lỗi 13(type error) và tôi không tìm thấy lý do tại sao.

Bất kỳ ai cũng có thể giúp tôi?

Trả lời

9

Trước tiên, bạn cần phải kiểm tra rằng các tế bào có chứa một lỗi:

If IsError(MyTab(i, j).Value) Then 
    If MyTab(i, j).Value <> CVErr(xlErrNA) Then 

Trừ khi bạn muốn biết các loại lỗi (# N/A, # DIV/0 !, vv), bạn cũng có thể thay thế thử nghiệm của bạn với:

If (Not IsEmpty(MyTab.value)) And (Not IsError(MyTab(i, j).value)) Then 

Nếu bạn cần phải kiểm tra các loại lỗi, bạn có thể viết:

Dim shouldBuildRequest As Boolean 

shouldBuildRequest = Not IsEmpty(MyTab.value) 
If IsError(MyTab(i, j).Value) Then 
    shouldBuildRequest = shouldBuildRequest AND (MyTab(i, j).Value <> CVErr(xlErrNA)) 
End If 

If shouldBuildRequest Then 
    Call BuildRequest(False, id, MyTab, i, j) 
End If 
+0

+ 1 Đẹp nhất :) –

+0

Cảm ơn vì điều đó :). Bạn đến Siddharth Rout –

4

Một w ay để kiểm tra lỗi

If CVErr(MyTab(i, j).Value) = CVErr(xlErrNA) 
+1

Pfffff .... Bạn luôn tìm được cách tốt hơn! ;-) – assylias

+0

Tôi đang cố gắng kiểm tra lỗi tương tự cho một ô đã hợp nhất ("B6: D6"), tôi đang sử dụng mã bên dưới và đưa ra lỗi. Nếu CVErr (ws.Range ("B6"). MergeArea.Cells (1, 1) .Value) = CVErr (xlErrNA) Sau đó, – Isu