2012-12-07 34 views
5

Tôi có một biến fila với một dòng đầy đủ với các giá trị của ExcelTại sao vba doesnt xử lý Lỗi 2042

Vấn đề là khi trong Excel Tôi có #N/A, VBA có giá trị như Error 2042.

Tôi không thể gán giá trị đó cho valor gây lỗi. Cho đến thời điểm này tất cả mọi thứ là ok, bây giờ tôi đang cố gắng để xác định một On Error Goto để đi đến vòng lặp tiếp theo trong vòng lặp For, nhưng tôi không biết tại sao VBA không xử lý lỗi.

Do While Not IsEmpty(ActiveCell) 

    txt = ActiveCell.Value2 
    cell = ActiveCell.Offset(0, 1).Value2  
    fila = Range("C20:F20") 

    For j = 1 To UBound(fila, 2) 
     On Error GoTo Siguiente 
     If Not IsEmpty(fila(1, j)) Then    
      valor = fila(1, j) 
      cmd = Cells(1, j + 2).Value2 
      devolver = function1(cmd, txt, cell, valor) 
      arrayDevolver(p) = devolver 
      p = p + 1     
     End If 
Siguiente: 
    Next 
Loop 
+0

Tại sao bạn sử dụng Value2? (chưa bao giờ nghe nói về nó) – CustomX

+5

Giá trị của nó hiệu quả hơn, bởi vì giá trị kiểm tra nếu các giá trị là một loại dữ liệu hoặc loại tiền tệ http://msdn.microsoft.com/en-us/library/office/aa215938%28v=office.11 % 29.aspx –

Trả lời

10

Đây không phải lỗi VBA - do đó việc xử lý lỗi sẽ không bắt được. Để phát hiện vấn đề này sử dụng IsError trước bằng văn bản cho mảng của bạn

Mã đơn giản dưới đây xử lý các Lỗi 2042 vấn đề với thử nghiệm này

Sub Test() 
    Dim varIn As Variant 
    [a1].FormulaR1C1 = "=NA()" 
    If IsError([a1].Value2) Then 
     varIn = "skip record" 
    Else 
     varIn = [a1].Value2 
    End If 
End Sub 
+0

Hey Cảm ơn nó giải quyết vấn đề của tôi Tôi không biết "lỗi 2042" của nó một loại differnte errror. –