Mọi người giúp em lấy dữ liệu cho lisbox trong form với! (1 người xem)

Liên hệ QC

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

quoc nhat

Thành viên tiêu biểu
Tham gia
8/3/12
Bài viết
567
Được thích
43
Nghề nghiệp
cán bộ ngành y tế
em có cái form QLBH giờ muốn lấy dữ liệu các cột B, C,E, F, G, H , K ở Sheet 5 thì làm như thế nào ạ, em chẳng biết làm thế nào cả. Nếu được mọi người chỉ dẫn cho em cách lấy tiêu đề các cột ấy luôn.
Mong mọi người cố gắng giúp đỡ
 

File đính kèm

Trong khi chờ đợi các anh chị quan tâm giúp đỡ thì em đã làm được cái phần lấy dữ liệu cho listbox cho form QLBH rồi nhưng lại vướng mắc một cái là ở Sheet 5 của em có những dòng không có dữ liệu nên nó không thể lấy dữ liệu tất cả các dòng ở phía dưới được. Giờ em muốn load tất cả lên bao gồm những dòng không có dữ liệu đó thì làm thế nào?
Mọi người giúp em với
 

File đính kèm

Upvote 0
chắc là vụ này khó lắm hay sao ấy mà chẳng thấy em ai giúp em cả nhỉ ?????????????????????????????
 
Upvote 0
sớm giúp em với các anh chị ơi!

Không phải khó mà là Khó hiểu bạn muốn gì? đã vậy phải đọc code đã khó , để hiểu người ta mắc đâu muốn gì lại càng khó hơn

Vì thế bạn nên giải thích rõ:

- bạn đang mắc gì ở đâu (sub nào code nào, module nào)
- bạn muốn hỏi gì ở đoạn code nào, hay thuật toán gi
- mô tả những gì bạn muốn làm (tổng quan) cho vấn đề bài toán này

??? nhớ mô tả giống như bạn mô tả cho người chưa biết bạn đang coding cái gì, giải thích cho người ta hiểu

Xong những cái đó, không ai giúp bạn thì mới lạ (nếu thế thì giải tán GPE lun)
 
Upvote 0
dạ thưa anh!
em đang vướng mắc ở chổ chọn dữ liệu cho listbox ở cái userform QLBH ấy. Em không biết phải thêm vào đoạn code như thế nào để listbox lấy toàn bộ dữ liệu ở Sheet 5 từ dòng số 10 đến hết dòng số 1000 được (vì nó có những dòng trống).
Vì kinh nghiệm lập trình về VBA của em kém quá nên không biết sửa ở đâu cả. Cái này em copy từ diễn đàn về anh ạ!
 
Lần chỉnh sửa cuối:
Upvote 0
dạ thưa anh!
em đang vướng mắc ở chổ chọn dữ liệu cho listbox ở cái userform QLBH ấy. Em không biết phải thêm vào đoạn code như thế nào để listbox lấy toàn bộ dữ liệu ở Sheet 5 từ dòng số 10 đến hết dòng số 1000 được (vì nó có những dòng trống).
Vì kinh nghiệm lập trình về VBA của em kém quá nên không biết sửa ở đâu cả. Cái này em copy từ diễn đàn về anh ạ!

Để trả lời câu hỏi của bạn (đạt mục tiêu trước mắt) thì bạn sửa Sub nap() trong module form QLBH thành như sau
PHP:
Private Sub nap()
Dim j, i As Long
ListBox1.Clear
i = 10
j = 0
 ''Do While Sheet5.Cells(i, 5) <> ""
 For i = 10 To Sheet5.Cells(65000, 5).End(xlUp).Row ' 10000
    If IIf(Me.CheckBox1, InStr(1, Sheet5.Cells(i, 2), TextBox1, 1) = 1, InStr(1, _
            Sheet5.Cells(i, 5), TextBox1, 1) > 0) Then
        ListBox1.AddItem (Sheet5.Cells(i, 2))
        Me.ListBox1.List(j, 1) = Sheet5.Cells(i, 5)
        Me.ListBox1.List(j, 2) = Sheet5.Cells(i, 6)
        Me.ListBox1.List(j, 3) = Sheet5.Cells(i, 7)
        Me.ListBox1.List(j, 4) = Sheet5.Cells(i, 8)
        Me.ListBox1.List(j, 5) = Sheet5.Cells(i, 11)
        j = j + 1
    End If
Next i
''i = i + 1
 '''Loop
End Sub

-Tôi chỉ chỉnh giúp bạn việc lấy đến hàng cuối cùng cho list box, tôi vẫn để số 10000 ở chỗ FOR đó, nếu bạn thích lấy đến 10000 (NHƯNG lấy vừa vặn số hàng dữ liệu có thì vẫn hay hơn)
-Tôi cũng thay DO WHILE của bạn thành FOR đó, và tôi vẫn để nguyên ghi chú lại code cũ để bạn tiện so sánh, sau đó nên xóa đi
- Về các cái khác tôi không ý kiến



Thực ra bạn cần xem lại:
- Cách bố trí dữ liệu ở sheet 5 của bạn, không ai bố trí cơ sở dữ liệu thế: cách dòng, đan xen "tổng cộng", đan xen " trình bày in : giám đốc . ... ký ta", merged cell tùm la tùm lum
- Dữ liệu thường ng ta bố chí thuần túy dữ liệu, không dòng trống, tránh lặp lại, tránh các trình bày, tránh đan xen các thông kế (tổng cộng, trung bình) -- tức là chỉ thuần dữ liệu thô
- muốn sáng sủa chiều cũng ..... như sáng: thì bạn nên đọc về tổ chức Cơ sở dữ liệu (CSDL)nhé......

===> có bố trí chuẩn CSDL thì bạn mới code nhanh và chuẩn cấu trúc được
 
Lần chỉnh sửa cuối:
Upvote 0
Trước tiên cảm ơn anh đã chịu khó giúp em.
Anh thông cảm đây là file mà người ta đã quy định sẵn rồi nên em không thể sắp xếp lại được anh ạ!em cũng muốn thế lắm
 
Upvote 0
dạ thưa anh!
em đang vướng mắc ở chổ chọn dữ liệu cho listbox ở cái userform QLBH ấy. Em không biết phải thêm vào đoạn code như thế nào để listbox lấy toàn bộ dữ liệu ở Sheet 5 từ dòng số 10 đến hết dòng số 1000 được (vì nó có những dòng trống).
Vì kinh nghiệm lập trình về VBA của em kém quá nên không biết sửa ở đâu cả. Cái này em copy từ diễn đàn về anh ạ!
Sửa lại cách nạp listbox từ array. Hình như bạn làm chưa xong.
Và cái dòng cuối cột 5 sheet5 khó lấy quá. Nên xem lại data <> report
 

File đính kèm

Upvote 0
Trước tiên cảm ơn anh đã chịu khó giúp em.
Anh thông cảm đây là file mà người ta đã quy định sẵn rồi nên em không thể sắp xếp lại được anh ạ!em cũng muốn thế lắm

hiii- Nếu ng ta quy định thế thì mình vẫn có thể chuyển nó về cách của mình - trước khi đi vào CODING

dĩ nhiên đó là việc của bạn, lựa chọn của bạn, song bạn vẫn bố trí thế thì hẳn nào mọi người ngại giúp
 
Upvote 0
hiii- Nếu ng ta quy định thế thì mình vẫn có thể chuyển nó về cách của mình - trước khi đi vào CODING

dĩ nhiên đó là việc của bạn, lựa chọn của bạn, song bạn vẫn bố trí thế thì hẳn nào mọi người ngại giúp
Hì. Nếu có thể được bạn giúp mình được không. Mà mình quên giải thích với bạn là ở sheet 5 tại sao lại có nhũng dòng trống đó: là vì ở sheet 5 sẽ cập nhật từng đơn phiếu ở sheet1 " phiêuxuat in" mỗi khi mình bấm lệnh in phiếu.Giá như mình làm được code tự động chèn dòng thì sẽ không có việc mình để những dòng trống đó nhiều như vậy nên mong mong người nhưng đừng nhìn vào file của mình mà thấy buồn cười nhé! Cảm ơn
 
Upvote 0
Sửa lại cách nạp listbox từ array. Hình như bạn làm chưa xong.
Và cái dòng cuối cột 5 sheet5 khó lấy quá. Nên xem lại data <> report
Sao cái của bạn gửi lên cho mình, mình kiểm tra( ví dụ như em đánh tên hay là mã số BHYT vào thì nó cứ nhảy ra cái gì ấy) Bạn kiểm tra lại giúp mình với!
 
Upvote 0
Hì. Nếu có thể được bạn giúp mình được không. Mà mình quên giải thích với bạn là ở sheet 5 tại sao lại có nhũng dòng trống đó: là vì ở sheet 5 sẽ cập nhật từng đơn phiếu ở sheet1 " phiêuxuat in" mỗi khi mình bấm lệnh in phiếu.Giá như mình làm được code tự động chèn dòng thì sẽ không có việc mình để những dòng trống đó nhiều như vậy nên mong mong người nhưng đừng nhìn vào file của mình mà thấy buồn cười nhé! Cảm ơn

Như trên đã nói, bạn không mô tả kỹ, thì tôi không thể giúp được,
chỉ giúp được chừng mực thui

Còn muốn code insert dòng thế nào, bạn thử Record macro là thấy ngay cần code thế nào - tôi không giúp được, vì với các mô tả trên của bạn quá ngắn gọn để tôi hiểu, khi bấm phiếu in thì dữ liệu chuyển vào vị trí nào là đúng (tuy vậy, nếu đúng bố trí cơ sở DL chuẩn thì người ta không quan tâm đặt đúng vùng, mà chỉ cần cộng tiếp cộng tiếp bản ghi (dòng) tiếp theo, vì trong 1 bản ghi thì nó đủ các thông tin để nó riêng biệt cũng như liên kết với cái khác)
 
Upvote 0
thưa anh. EM không biết mô tả thế nào để anh hiểu hết ý em được. Có nghĩa là ở cái sheet 1 ấy khi em nhập đầy đủ thông tin xong thì em bấm cái nút lệnh in phiếu đó khi đó trong cơ sở dữ liệu đó có cái mục là mã thẻ BHYT: VD như CH74505..... khi bấm lệnh nó sẽ tự động được cập nhật vào sheet 5 mà vào đúng chổ đã quy định để chưa cái Mã thẻ BHYT đó mục chứa mục CHva các loại mã thẻ khác vào đúng nơi của nó. Khi mục CH ở sheet 5 đầy thì nó sẽ tự động INSet thêm dòng để sau này nếu có thêm 1 phiếu có chữa mã CH đó nữa thì nó sẽ được cập nhật vào dòng vừa INSET ấy.
Em giải thích như vậy anh có hiểu được không
Mà cho em hỏi lại với sao khi em load cái code khi nảy anh sửa giúp em thì nó không thể kiểm tra được vậy. Em giải thích lại cái đoạn code anh giúp em dùng để kiểm tra: khi em bấm vào TXT phía trên( có kèm theo checkbox) ví dụ 1 mã thẻ như HN4450500500678 thì lập tức ở listbox sẽ hiện ra số lần khám của người có mã thẻ BHYt đó.
 
Upvote 0
Mà cho em hỏi lại với sao khi em load cái code khi nảy anh sửa giúp em thì nó không thể kiểm tra được vậy. Em giải thích lại cái đoạn code anh giúp em dùng để kiểm tra: khi em bấm vào TXT phía trên( có kèm theo checkbox) ví dụ 1 mã thẻ như HN4450500500678 thì lập tức ở listbox sẽ hiện ra số lần khám của người có mã thẻ BHYt đó.

bạn nói CODE nào của ai ah?

nếu là code ở bài #7 thì lưu ý tôi không sửa gì code của bạn, ngoài thay DoWhile thành FOR và load hết các dòng dữ liệu như bạn muốn (hết) -- còn các cái khác trong sub NAP tôi để nguyên,


nên nếu là dùng code bài 7 đó THẤY SAI như bạn nói, thì bạn phải check lại thuật toán của mình
 
Upvote 0
bạn nói CODE nào của ai ah?

nếu là code ở bài #7 thì lưu ý tôi không sửa gì code của bạn, ngoài thay DoWhile thành FOR và load hết các dòng dữ liệu như bạn muốn (hết) -- còn các cái khác trong sub NAP tôi để nguyên,


nên nếu là dùng code bài 7 đó THẤY SAI như bạn nói, thì bạn phải check lại thuật toán của mình
em xin lỗi anh, em nhầm với bài của thunghi. Anh ơi cho em hỏi lúc anh sửa code giúp em anh có nói là nên xoá đoạn code so sánh gì đó, anh hướng dẫn em nên xoá đoạn nào được không? Cái này em mù tịt luôn, và có cách nào khi load Form lên đỡ nặng không anh?
 
Upvote 0
em xin lỗi anh, em nhầm với bài của thunghi. Anh ơi cho em hỏi lúc anh sửa code giúp em anh có nói là nên xoá đoạn code so sánh gì đó, anh hướng dẫn em nên xoá đoạn nào được không? Cái này em mù tịt luôn, và có cách nào khi load Form lên đỡ nặng không anh?

Không xoá cũng không sao vì nó đã được đưa vào dấu nháy trên '

ý tôi là xoá những ghi chú lệnh DoWhile để lại -màu xanh sau

Mã:
Private Sub nap()
Dim j, i As Long
ListBox1.Clear
i = 10
j = 0
 [B][COLOR="#0000FF"]''Do While Sheet5.Cells(i, 5) <> ""[/COLOR][/B]
 For i = 10 To Sheet5.Cells(65000, 5).End(xlUp).Row [COLOR="#0000FF"][B]' 10000[/B][/COLOR]
    If IIf(Me.CheckBox1, InStr(1, Sheet5.Cells(i, 2), TextBox1, 1) = 1, InStr(1, _
            Sheet5.Cells(i, 5), TextBox1, 1) > 0) Then
        ListBox1.AddItem (Sheet5.Cells(i, 2))
        Me.ListBox1.List(j, 1) = Sheet5.Cells(i, 5)
        Me.ListBox1.List(j, 2) = Sheet5.Cells(i, 6)
        Me.ListBox1.List(j, 3) = Sheet5.Cells(i, 7)
        Me.ListBox1.List(j, 4) = Sheet5.Cells(i, 8)
        Me.ListBox1.List(j, 5) = Sheet5.Cells(i, 11)
        j = j + 1
    End If
Next i
[B][COLOR="#0000FF"]''i = i + 1
 '''Loop[/COLOR][/B]
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Không xoá cũng không sao vì nó đã được đưa vào dấu nháy trên '

ý tôi là xoá những ghi chú lệnh DoWhile để lại -màu xanh sau

Mã:
Private Sub nap()
Dim j, i As Long
ListBox1.Clear
i = 10
j = 0
 [B][COLOR=#0000FF]''Do While Sheet5.Cells(i, 5) <> ""[/COLOR][/B]
 For i = 10 To Sheet5.Cells(65000, 5).End(xlUp).Row [COLOR=#0000FF][B]' 10000[/B][/COLOR]
    If IIf(Me.CheckBox1, InStr(1, Sheet5.Cells(i, 2), TextBox1, 1) = 1, InStr(1, _
            Sheet5.Cells(i, 5), TextBox1, 1) > 0) Then
        ListBox1.AddItem (Sheet5.Cells(i, 2))
        Me.ListBox1.List(j, 1) = Sheet5.Cells(i, 5)
        Me.ListBox1.List(j, 2) = Sheet5.Cells(i, 6)
        Me.ListBox1.List(j, 3) = Sheet5.Cells(i, 7)
        Me.ListBox1.List(j, 4) = Sheet5.Cells(i, 8)
        Me.ListBox1.List(j, 5) = Sheet5.Cells(i, 11)
        j = j + 1
    End If
Next i
[B][COLOR=#0000FF]''i = i + 1
 '''Loop[/COLOR][/B]
End Sub
Cảm ơn anh vì đã nhiệt tình giúp đỡ em.
 
Upvote 0
evà có cách nào khi load Form lên đỡ nặng không anh?

Load form nào?

nếu là form QLBH thì bạn nên dùng Array để load -dữ liệu gốc vào, rồi lọc --> rồi mới gán vào listbox, như thế sẽ nhẹ hơn.

Lần tiếp lọc (fillter) thì không cần phải load lại từ sheet5 nữa, mà chỉ cần sử dụng Array gốc thôi
 
Upvote 0
Load form nào?

nếu là form QLBH thì bạn nên dùng Array để load -dữ liệu gốc vào, rồi lọc --> rồi mới gán vào listbox, như thế sẽ nhẹ hơn.

Lần tiếp lọc (fillter) thì không cần phải load lại từ sheet5 nữa, mà chỉ cần sử dụng Array gốc thôi
Dạ! đúng là form QLBH đó anh. Nếu có thể anh giúp em với được không anh? Chứ trình độ của em chưa đủ để viết Array anh ạ
 
Upvote 0
Web KT

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

Back
Top Bottom