VBA và Cú pháp lệnh For Next

Liên hệ QC

Mr_cuong

Thành viên mới
Tham gia
15/11/07
Bài viết
33
Được thích
6
Kính Gửi các Anh Chị Thành Viên Diễn Đàn !
Xin vui lòng chỉ giúp:
Ví dụ
A1:A10 =("A")
A11:A20 =("B")
A21"A30 =("C")
Để Delete các dòng chứa ("B") tôi dùng lệnh như sau:
Sub DeL_RowB()
For i = 1 To 30
Range("A" & i).Select
If Selection.Value = ("B") Then
Rows("" & i).Select
Selection.Delete Shift:=xlUp
Else
End If
Next
End Sub

Nhưng nó chỉ Delete được 5 thay vì 10 dòng !?
Lệnh sai ở đâu, hoặc giải pháp nào để làm chuyện đó ?
Xin Chân thành cảm ơn đã chỉ giúp


 
addItem gì bạn???

đổi lại thế này xem sao

For i=1 to lRow
if sheet1.cells(i,1).Value<>"" then
me.lbDs.addItem
.....
end if
next i
[trong đó: lRow = sheet1.range("A65432").end(xlUp).Row -lưu ý lệnh này phải đặt trước FOR]
Bạn có thể xem câu lệnh tôi viết trong sub Update_lbDs (file đính kèm). Trong đó lrow1 tôi đã xác định trong phần khởi tạo form nghĩa là trước khi có sự kiện update_lbDs.
Tôi đã thử nhiều cách. Trong foxpro hay VB thì ta có thể cho nó skip khi gặp Đkiệnn kg thỏa nhưng trong Excel thì tôi lúng túng quá. Không biết dùng câu lệnh gì nữa.
Tôi hỏi câu này đã 3 ngày nay nhưng kg ai trả lời.
 

File đính kèm

Upvote 0
Bạn có thể xem câu lệnh tôi viết trong sub Update_lbDs (file đính kèm). Trong đó lrow1 tôi đã xác định trong phần khởi tạo form nghĩa là trước khi có sự kiện update_lbDs.
Tôi đã thử nhiều cách. Trong foxpro hay VB thì ta có thể cho nó skip khi gặp Đkiệnn kg thỏa nhưng trong Excel thì tôi lúng túng quá. Không biết dùng câu lệnh gì nữa.
Tôi hỏi câu này đã 3 ngày nay nhưng kg ai trả lời.

Chương trình bạn khá hay, rất là chuyên nghiệp, he he

Tìm mãi rồi cũng phát hiện ra,
Vấn đề ở itemI bạn nhé - bạn đọc CODE sẽ hiểu ngay -> tôi nghĩ thế vì bạn có khả năng

PHP:
Private Sub UpdateDs_List()
    Dim itemI As Long
    itemI = 0
    For r = 0 To lRow1 - 3
        If Sheet1.Cells(r + 3, 1).Value <> "" Then
           With Me
                .lbDs.AddItem
                .lbDs.List(itemI, 0) = Sheet1.Cells(r + 3, 1)
                .lbDs.List(itemI, 1) = Sheet1.Cells(r + 3, 3)
                .lbDs.List(itemI, 2) = Sheet1.Cells(r + 3, 4)
                .lbDs.List(itemI, 3) = Sheet1.Cells(r + 3, 5)
                .lbDs.List(itemI, 4) = Sheet1.Cells(r + 3, 6)
                .lbDs.List(itemI, 5) = Sheet1.Cells(r + 3, 8)
           End With
          itemI = itemI + 1
        End If
    Next
End Sub
 
Upvote 0
Hi Hi, Quả thực tôi vẫn nghi ngờ nhưng kg biết xử lý sao. Lại thêm 1 kinh nghiệm, Lỗi ở đây là do việc chuyển qua chuyển lai giữa 2 đối tượng (1 Form và 1 Sheet) phải không bạn, biến r tôi sử dụng chung cho việc duyệt cả trên 2 đối tượng nên trên form nó kg xử lý được phải không bạn??? Nói hơi "lộng ngôn 1 tý: Co lúc MS cũng kém thật).
Chung quy lại là ta chưa nghiên cứu sâu vè bản chất câu lệnh và cách chuyển giao (truyền giá trị của biến), chứ không lẽ MS lại kém vậy chứ!!
Đa tạ
 
Upvote 0
Hi Hi, Quả thực tôi vẫn nghi ngờ nhưng kg biết xử lý sao. Lại thêm 1 kinh nghiệm, Lỗi ở đây là do việc chuyển qua chuyển lai giữa 2 đối tượng (1 Form và 1 Sheet) phải không bạn, biến r tôi sử dụng chung cho việc duyệt cả trên 2 đối tượng nên trên form nó kg xử lý được phải không bạn??? Nói hơi "lộng ngôn 1 tý: Co lúc MS cũng kém thật).
Chung quy lại là ta chưa nghiên cứu sâu vè bản chất câu lệnh và cách chuyển giao (truyền giá trị của biến), chứ không lẽ MS lại kém vậy chứ!!
Đa tạ

Không phải,
Không nên tự làm khó nghĩ ra lý do thế

Bản chất là khi bạn bỏ qua dòng trống , nhưng R vẫn tăng -> khi gặp dòng mới thì list của bạn truy cập AddItem lúc này bạn vẫn tiếp tục R nhưng thực ra thì số Items của list chưa được cộng đến đó

Có thể hiểu giống như ta xếp sách, nếu bỏ qua xếp cuốn cao hơn thì không được bạn ah, hay nói cách khác ta chưa tạo ra chỗ để cuốn sách đó -> không để được
 
Upvote 0
Nhưng tại sao khi tôi để thêm dòng lệnh else và sau đó tôi lbbox.additem (mục đích là tao 1 dòng trên listbox nhưng không gán gì cả thì nó vẫn dừng ngay ở dòng trống?
 
Upvote 0
Web KT

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

Back
Top Bottom