delete bị lỗi, xin go giùm (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

blackname

Thành viên mới
Tham gia
27/11/06
Bài viết
6
Được thích
1
delete bị lỗi, xin chỉ giùm

mình có 1 doan code như sau:
PHP:
Sub delete()
    Dim cell As Range
        For Each cell In Selection
            If (cell.Value = 0) Then
                cell.EntireRow.delete
            End If
        Next
End Sub

nhưng nó bị lỗi ở 1 chỗ ví dụ như : có 4 ô số 0 liên tiếp nhau thì khi xóa thì chỉ xóa 2 ô, 6 ô thì xóa 3 ô, nói chung là chỉ xóa đi một nữa.. bạn nào biết xin chỉ cách khác phục lỗi trên...
 
Chỉnh sửa lần cuối bởi điều hành viên:
Cách 1
Tham khảo ở đây:
http://giaiphapexcel.com/forum/showthread.php?t=717
Cách 2
Gom lại hết các dòng thỏa điều kiện (ở đây là: cột 'G:G' chứa ô trống) & xóa 1 lần

Mã:
[b]Sub XoaDong_OTrong()[/b]
 Dim BlankRng As Range, Rng As Range, DelRng As Range
 Set BlankRng = ActiveSheet.UsedRange.Columns("G:G").SpecialCells(xlCellTypeBlanks)
 For Each Rng In BlankRng
    If DelRng Is Nothing Then
        Set DelRng = Rng
    Else
        Set DelRng = Union(DelRng, Rng)
    End If
 Next Rng
 DelRng.EntireRow.Delete
 
[b]End Sub[/b]
 
Upvote 0
blackname đã viết:
mình có 1 doan code như sau:
Sub delete()
Dim cell As Range
For Each cell In Selection
If (cell.Value = 0) Then
cell.EntireRow.delete
End If
Next
End Sub


nhưng nó bị lỗi ở 1 chỗ ví dụ như : có 4 ô số 0 liên tiếp nhau thì khi xóa thì chỉ xóa 2 ô, 6 ô thì xóa 3 ô, nói chung là chỉ xóa đi một nữa.. bạn nào biết xin chỉ cách khác phục lỗi trên...

Mình dùng bình thường mà. Bạn up file đi để xem cụ thể.
Thân!
 
Upvote 0
Cái này bị lỗi là đúng, vì xóa dòng thì vùng Selection sẽ bị thay đổi nên không xóa được hết.

Như cách bác SA_DQ là hợp lý vì bác đã sử dụng phương thức Union để chọn những vùng đó. Cuối cùng xóa một loạt, sẽ không bị sai.

Nếu bạn có điều kiện thì tham khảo thêm phần xóa những dòng trống.
 
Upvote 0
Như cách bác SA_DQ đã sử dụng phương thức Union để chọn những vùng đó. Cuối cùng xóa một loạt, sẽ không bị sai. [/B].
(ảm ơn PhanTuHuong nhiều;

Sau khi gởi bài lên, mình nghĩ lại là có thể dùng chỉ 3 dòng lệnh thôi:
Dòng 1 chỉ khai 2 biến;
Dòng 2
& dòng áp chót sửa lại như sau: BlankRng.EntireRow.Delete (Đã thử & OK!)

Còn muốn xóa tất các dòng nếu có ô trống trong dòng thì sửa lại câu lệnh 2 ngắn lại là xong (Thật ra chuyện này mình chưa thử, mới chỉ là phỏng đóan vậy thôi)!

(Có chuyện suy đi nghỉ lại vì đang nghiền ngẫm phương thức SpecialCells đó mà!)
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom