Đoạn code này lỗi ở chỗ nào?

  • Thread starter Thread starter salam
  • Ngày gửi Ngày gửi
Liên hệ QC

salam

Thành viên gắn bó
Tham gia
4/11/06
Bài viết
1,945
Được thích
1,896
Giới tính
Nam
Nghề nghiệp
Accountant
Trích
Sub XoaNA()
On Error Resume Next
Dim D As Range
For Each D In Range("C:C") 'cột có giá trị #N/A
If D = "#N/A" Then
Rows(D.Row).Delete
End If
Next
End Sub
Các bác xem hộ em code trên lỗi ở chỗ nào mà khi chạy nó xóa cách dòng, cứ cách một dòng mới xóa một dòng.
 
Chỉnh sửa lần cuối bởi điều hành viên:
From Help
PHP:
Example
This example inserts the seven cell error values into cells A1:A7 on Sheet1.

myArray = Array(xlErrDiv0, xlErrNA, xlErrName, xlErrNull, _
    xlErrNum, xlErrRef, xlErrValue)
For i = 1 To 7
    Worksheets("Sheet1").Cells(i, 1).Value = CVErr(myArray(i - 1))
Next i
		
This example displays a message if the active cell on Sheet1 contains a cell error value. You can use this example as a framework for a cell-error-value error handler.

Worksheets("Sheet1").Activate
If IsError(ActiveCell.Value) Then
    errval = ActiveCell.Value
    Select Case errval
        Case CVErr(xlErrDiv0)
            MsgBox "#DIV/0! error"
        Case CVErr(xlErrNA)
            MsgBox "#N/A error"
        Case CVErr(xlErrName)
            MsgBox "#NAME? error"
        Case CVErr(xlErrNull)
            MsgBox "#NULL! error"
        Case CVErr(xlErrNum)
            MsgBox "#NUM! error"
        Case CVErr(xlErrRef)
            MsgBox "#REF! error"
        Case CVErr(xlErrValue)
            MsgBox "#VALUE! error"
        Case Else
            MsgBox "This should never happen!!"
    End Select
End If
Bạn thử như sau xem

PHP:
 If CVErr(D) = CVErr(xlErrNA) Then '
Rows(D.Row).Delete
End If

Constant Error number Cell error value
xlErrDiv0 2007 #DIV/0!
xlErrNA 2042 #N/A
xlErrName 2029 #NAME?
xlErrNull 2000 #NULL!
xlErrNum 2036 #NUM!
xlErrRef 2023 #REF!
xlErrValue 2015 #VALUE!

Nếu dùng Application.Worksheetfunction thì có hàm ISNA(cell) = TRUE
 
Upvote 0
salam đã viết:
Trích
Sub XoaNA()
On Error Resume Next
Dim D As Range
For Each D In Range("C:C") 'cột có giá trị #N/A
If D = "#N/A" Then
Rows(D.Row).Delete
End If
Next
End Sub
Các bác xem hộ em code trên lỗi ở chỗ nào mà khi chạy nó xóa cách dòng, cứ cách một dòng mới xóa một dòng.
Tôi thì chả làm những chuyện này. Nhưng bạn thử nghĩ nếu theo thứ tự từ trên xuống dưới, nếu delete 1 dòng thì next sẽ là dòng nào.
Thường những thuật toán có delete dòng thì nên đi từ dưới lên
For i = EndRow to FiristRow step -1
...
Next
 
Upvote 0
Có lẽ nên dùng kiểu này hơn

iRow=1
cRow=1000
Do While iRow<cRow
If errNA then
DeleteRow(iRow)
iRow=iRow-1
cRow=cRow-1
End If
iRow=iRow+1
Loop
 
Upvote 0
Các bạn đến đây, chợ đông & vui lắm nghen

http://www.giaiphapexcel.com/forum/showthread.php?t=2896

Trami.jpg
 
Upvote 0
Web KT

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

Back
Top Bottom