Bị lỗi khi gặp giá trị: #N/A thì cách xử lý như thế nào?

Liên hệ QC

phamvandunghp84

Thành viên thường trực
Tham gia
5/3/20
Bài viết
241
Được thích
12
khi chạy gặp cells kia đang có giá trị #N/A thì VBA dừng chạy và báo lỗi. Cho mình hỏi làm thế nào để name vẫn hiểu được giá trị là #N/A , mà không báo lỗi nữa vẫn tiếp tục chạy được nhỉ?

sub test()
Dim i As Integer
Dim name As String
...
name = Cells(2, j + 2).Value
MsgBox (name)
If name = "#N/A" Then
For k = 4 To LastRow
name = Cells(k, j + 2).Value
If name <> "#N/A" Then
Exit For
End If
Next k
End Sub
 
xử lí từ gốc trên cell cho dễ bạn nhé, =iferror(công thức trong ô hiện tại,"") nếu có lỗi ô sẽ có giá trị trống
 
Upvote 0
một câu hỏi quá lờ mờ, cần có file, mục đích của code để làm gì?
 
Upvote 0
khi chạy gặp cells kia đang có giá trị #N/A thì VBA dừng chạy và báo lỗi. Cho mình hỏi làm thế nào để name vẫn hiểu được giá trị là #N/A , mà không báo lỗi nữa vẫn tiếp tục chạy được nhỉ?

sub test()
Dim i As Integer
Dim name As String
...
name = Cells(2, j + 2).Value
MsgBox (name)
If name = "#N/A" Then
For k = 4 To LastRow
name = Cells(k, j + 2).Value
If name <> "#N/A" Then
Exit For
End If
Next k
End Sub
Khai báo Name có kiểu Variant - rồi xử lý khi gặp lỗi
 
Upvote 0
hoặc tiền trảm hậu tấu
thêm vào đầu code dòng này
on error resume next
 
Upvote 0
một câu hỏi quá lờ mờ, cần có file, mục đích của code để làm gì?
Tôi cũng thấy vậy. Khi đọc code thấy:
Thứ nhất tên biến đặt trùng với từ khoá,
Thứ hai j từ đâu ra không biết,
Thứ ba: cứ mỗi ô Cells(2, j +2) là 1 Msgbox. Nếu j trong 1 vòng lặp lớn hơn thì ok mệt nghỉ, nếu j là một hằng số thì mắc gì phải cộng 2?
Thứ tư thấy giá trị NA lại chạy 1 vòng lặp, trong vòng lặp nếu thấy khác NA thì thoát vòng lặp. Vậy mục đích là gì?

Chưa kể #N/A không phải là 1 chuỗi không thể lấy ra bằng Cell.Value được.
 
Upvote 0
Tôi cũng thấy vậy. Khi đọc code thấy:
Thứ nhất tên biến đặt trùng với từ khoá,
Thứ hai j từ đâu ra không biết,
Thứ ba: cứ mỗi ô Cells(2, j +2) là 1 Msgbox. Nếu j trong 1 vòng lặp lớn hơn thì ok mệt nghỉ, nếu j là một hằng số thì mắc gì phải cộng 2?
Thứ tư thấy giá trị NA lại chạy 1 vòng lặp, trong vòng lặp nếu thấy khác NA thì thoát vòng lặp. Vậy mục đích là gì?

Chưa kể #N/A không phải là 1 chuỗi không thể lấy ra bằng Cell.Value được.

Chưa kể #N/A không phải là 1 chuỗi không thể lấy ra bằng Cell.Value được. => bạn ơi có cách nào để VBA hiểu #N/A , có thể lấy được bằng Cell.Value ? Mình tự học mò mẫm nên nhiều thứ không đâu vào đâu mong bạn thông cảm. Mục đích của mình là dò tìm giá trị trong cột, nếu tìm thấy giá trị khác giá trị #N/A thì dừng lại.
Bài đã được tự động gộp:

xử lí từ gốc trên cell cho dễ bạn nhé, =iferror(công thức trong ô hiện tại,"") nếu có lỗi ô sẽ có giá trị trống
mình dùng excel 2007. có cách nào để chuyển điều bạn nói thành code VBA không bạn?
nghĩa là trong ô có chứa #N/A làm thế nào để câu lệnh sau không bị báo lỗi ?

If Sheets("Hoctap").Cells(2, j).Value = "#N/A" Then
 
Upvote 0
Mục đích của code để làm gì bạn?
bạn muốn thay thế giá trị #N/A bằng 1 giá trị khác?
 
Upvote 0
Mục đích của code để làm gì bạn?
bạn muốn thay thế giá trị #N/A bằng 1 giá trị khác?

mình muốn VBA hiểu được câu lệnh này khi gặp ô có chứa giá trị #N/A
If Sheets("Hoctap").Cells(2, j).Value = "#N/A" Then

mình tìm được cái này nhưng kỳ lạ là nếu cột để nhỏ quá (chữ chỉ còn thấy dạng ##) thì nó lại không chạy. chỉ chạy khi độ rộng của cột đủ lớn để hiển thị rõ chữ #N/A. không biết tại sao lại vậy nhỉ?

If Sheets("Hoctap").Cells(2, j).Text = "#N/A" Then
 
Upvote 0
khi chạy gặp cells kia đang có giá trị #N/A thì VBA dừng chạy và báo lỗi. Cho mình hỏi làm thế nào để name vẫn hiểu được giá trị là #N/A , mà không báo lỗi nữa vẫn tiếp tục chạy được nhỉ?

sub test()
Dim i As Integer
Dim name As String
...
name = Cells(2, j + 2).Value
MsgBox (name)
If name = "#N/A" Then
For k = 4 To LastRow
name = Cells(k, j + 2).Value
If name <> "#N/A" Then
Exit For
End If
Next k
End Sub
Xem code
Mã:
Sub test()
  Dim k As Long
  '...
  If Application.IsNA(Cells(2, j + 2).Value) Then
    For k = 4 To LastRow
      If Application.IsNA(Cells(k, j + 2).Value) = fase Then
        Exit For
      End If
    Next k
  End If
End Sub
 
Upvote 0
Dùng hàm IsError của VBA

HTML:
If IsError(Cells(k, j + 2).Value) Then
 
Upvote 0
Upvote 0
1599042187412.pngNó mà như thế này cũng căng đét đó.
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom