Để làm tươi DL trên lisbox thì như thế nào?

Liên hệ QC

manhhung12

Thành viên thường trực
Tham gia
20/3/08
Bài viết
232
Được thích
88
Tôi có 1 file trong đó là các form nhập liệu: có mấy vấn đề cần giải quyết, các bạn giúp đỡ:
1/ Khi insert 1 dòng nhưng trên lisbox kg hiển thị mà phải thoát ra vào lại mới có dòng đó trên lisbox. Để làm tươi DL trên lisbox thì như thế nào?
2/Trước khi insert thì việc kiểm tra đã có/chưa mã (maten) đẻ quyết định?
3/Khi khởi động file thì trên màn hình (toàn màn hình) chỉ có các nút bấm và lẽ dĩ nhiên phải có nút Exit (đóng file->thoát khỏi Excel) chứ không phải là 1 bảng (trên đó có các nút bấm) như trong file tôi làm gửi kèm theo.
Mong các bạn giúp đỡ.
1/????
2/Đã giải quyết
3/Đã giải quyết
To: Sealan: Mĩnhđâ sửa xong câu 2 và 3 và gửi lai file cho bạn xem-> góp ý nhé.
Thân
 

File đính kèm

Lần chỉnh sửa cuối:
To manhhung12: Mình tham gia như sau:
1. Để làm tươi listbox thì bạn nên viết 1 sub nạp dữ liệu cho listbox và ta gọi nó khi:
-Mở form (Initialize)
-Cập nhật mã ( Sửa hay thêm mới)
Mình ví dụ như sau

Private Sub CommandButton1_Click()
dong = Application.WorksheetFunction.CountA(Sheet3.Range("A:A"))
Sheet3.Cells(dong + 1, 1) = Me.TextBox1
Call nap_lis
End Sub
-----------------------------------------------------
Private Sub UserForm_Initialize()
Call nap_lis
End Sub
------------------------------------------------------
Public Sub nap_lis()
If Me.ListBox1.ListCount > 0 Then
Me.ListBox1.Clear
End If
For i = 1 To Application.WorksheetFunction.CountA(Sheet3.Range("A:A"))
Me.ListBox1.AddItem (Sheet3.Cells(i, 1))
Next
End Sub
(Khi sửa ta cũng gọi sub này)

2.Để kiểm tra gọn nhất là ta dùng hàm countif() đếm ma (textbox1) trên vùng ma. Nếu >0 tức là mã đã có.
3.Mình không rõ ý bạn lắm. Nếu chỉ để thoát khỏi Excel thì dùng phương thức:
Application.Quit


 
Upvote 0
To manhhung12: Mình tham gia như sau:
1. Để làm tươi listbox thì bạn nên viết 1 sub nạp dữ liệu cho listbox và ta gọi nó khi:
-Mở form (Initialize)
-Cập nhật mã ( Sửa hay thêm mới)
Mình ví dụ như sau

Private Sub CommandButton1_Click()
dong = Application.WorksheetFunction.CountA(Sheet3.Range("A:A"))
Sheet3.Cells(dong + 1, 1) = Me.TextBox1
Call nap_lis
End Sub
-----------------------------------------------------
Private Sub UserForm_Initialize()
Call nap_lis
End Sub
------------------------------------------------------
Public Sub nap_lis()
If Me.ListBox1.ListCount > 0 Then
Me.ListBox1.Clear
End If
For i = 1 To Application.WorksheetFunction.CountA(Sheet3.Range("A:A"))
Me.ListBox1.AddItem (Sheet3.Cells(i, 1))
Next
End Sub
(Khi sửa ta cũng gọi sub này)

2.Để kiểm tra gọn nhất là ta dùng hàm countif() đếm ma (textbox1) trên vùng ma. Nếu >0 tức là mã đã có.
3.Mình không rõ ý bạn lắm. Nếu chỉ để thoát khỏi Excel thì dùng phương thức:
Application.Quit


1/ Mình dùng name động mà. Rowsource=sheet2!lvBds
2/Mình kiểm tra bằng hàm if range().find(TextLook,lookIn:=xlValues) is nothing then ....
3/Tức là trên màn hình ta chỉ nhìn thấy các nút bấm thôi. Nhưng có lẽ tạo form và gán Top=0, left=0..., nhưng đẻ gán cho nút thoat khỏi excel (đóng file và thoát) thì ????
 
Upvote 0
Bạn tìm trong các phương thức của listbox không có refresh, requery... nên mình phải tự làm tươi lại thôi. Bạn dùng Name (Dù là name động) nó vẫn không cập nhật. Name có cái lợi là nhanh gọn hơn.

Giờ tôi mới hiểu ý bạn là muốn dọn sheet điều khiển phong quang hơn chứ gì. Bạn vào Options bỏ hết thanh cuộn, thanh công thức, tiêu đề dòng cột, rồi chốt scroll lại thì sheet của bạn đạt rồi. Còn nếu bạn tạo form thì kích thước tối đa cũng chỉ vậy thôi mà thêm rắc rối. Bạn lưu ý là mình ở đậu Excel thì thoát Excel sao giữ đwợc Form (VBA chứ không phải VB). Cầu kỳ hơn thì viết Form Main bằng VB sử dụng dữ liệu Excel mới toại ý bạn.
 
Lần chỉnh sửa cuối:
Upvote 0
1/ Mình dùng name động mà. Rowsource=sheet2!lvBds
2/Mình kiểm tra bằng hàm if range().find(TextLook,lookIn:=xlValues) is nothing then ....
3/Tức là trên màn hình ta chỉ nhìn thấy các nút bấm thôi. Nhưng có lẽ tạo form và gán Top=0, left=0..., nhưng đẻ gán cho nút thoat khỏi excel (đóng file và thoát) thì ????

Không biết có phải bạn muốn thoát khỏi excel là thế này phải không:
Private Sub Workbook_Open()

Application.Visible = False


Userform.Show


End Sub
 
Upvote 0
Tôi có 1 file trong đó là các form nhập liệu: có mấy vấn đề cần giải quyết, các bạn giúp đỡ:
1/ Khi insert 1 dòng nhưng trên lisbox kg hiển thị mà phải thoát ra vào lại mới có dòng đó trên lisbox. Để làm tươi DL trên lisbox thì như thế nào?
2/Trước khi insert thì việc kiểm tra đã có/chưa mã (maten) đẻ quyết định?
3/Khi khởi động file thì trên màn hình (toàn màn hình) chỉ có các nút bấm và lẽ dĩ nhiên phải có nút Exit (đóng file->thoát khỏi Excel) chứ không phải là 1 bảng (trên đó có các nút bấm) như trong file tôi làm gửi kèm theo.
Mong các bạn giúp đỡ.
1/????
2/Đã giải quyết
3/Đã giải quyết
To: Sealan: Mĩnhđâ sửa xong câu 2 và 3 và gửi lai file cho bạn xem-> góp ý nhé.
Thân


Góp ý với bạn thế này :

1. Kiểm tra lỗi khi trước khi lưu : Bạn nên xây dựng 1 hàm (UDF) để kiểm soát, nếu chưa có đủ dữ liệu hoặc dữ liệu bị sai thì sẽ trả về False

2. Bản chất của việc sửa cũng giống hệt việc lưu (kể cả trên Form và trên Sheet), chỉ khác nhau là dòng ở chỗ nào thôi.
  • Lưu : Dòng cuối cùng + 1 (Cả Form và Sheet)
  • Sửa : Dòng nà tại đó giá trị được coi là ID (Mã) trùng nhau (cả Form và Sheet), khi đó nó chỉ việc ghi đè lên thôi
3. Các Textbox nên đặt tên cho rõ ràng theo đúng nội dung nó chứaa đựng, khi đó việc lập trình sẽ trở lên dễ dàng hơn rất nhiều.

4. Nên sử dụng tốt hơn cách thức : With Me . . . . . . End With

5. Và vào vấn đề của bạn, bạn không cần làm tươi lại Listbox đâu, khi ghi vào Sheet thì đồng thời bạn hãy ghi luôn vào Listbox, không nên sử dụng Name để tạo dữ liệu cho Listbox, khi đã sử dụng VBA quen rồi thì bạn sẽ thấy rằng việc sử dụng công thức Excel sẽ trở thành vướng víu

6. Bạn nên học cách sử dụng Listview, nó rất dễ sử dụng, nhiều chức năng, trực quan, và có thẩm mỹ (Có Header, có đường lưới của hàng, cột, có thể thay đổi màu từng hàng và từng cột, có thể Format cho từng cột - căn phải, trái, đậm nhạt . . )

Cái này chỉ là góp ý, nếu thấy thích thì bạn có thể thử làm, chỗ nào cần mình giúp thì mình sẽ giúp bạn.

Chúc mau tiến bộ.

Thân!
 
Upvote 0
Góp ý với bạn thế này :

1. Kiểm tra lỗi khi trước khi lưu : Bạn nên xây dựng 1 hàm (UDF) để kiểm soát, nếu chưa có đủ dữ liệu hoặc dữ liệu bị sai thì sẽ trả về False

2. Bản chất của việc sửa cũng giống hệt việc lưu (kể cả trên Form và trên Sheet), chỉ khác nhau là dòng ở chỗ nào thôi.
  • Lưu : Dòng cuối cùng + 1 (Cả Form và Sheet)
  • Sửa : Dòng nà tại đó giá trị được coi là ID (Mã) trùng nhau (cả Form và Sheet), khi đó nó chỉ việc ghi đè lên thôi
3. Các Textbox nên đặt tên cho rõ ràng theo đúng nội dung nó chứaa đựng, khi đó việc lập trình sẽ trở lên dễ dàng hơn rất nhiều.

4. Nên sử dụng tốt hơn cách thức : With Me . . . . . . End With

5. Và vào vấn đề của bạn, bạn không cần làm tươi lại Listbox đâu, khi ghi vào Sheet thì đồng thời bạn hãy ghi luôn vào Listbox, không nên sử dụng Name để tạo dữ liệu cho Listbox, khi đã sử dụng VBA quen rồi thì bạn sẽ thấy rằng việc sử dụng công thức Excel sẽ trở thành vướng víu

6. Bạn nên học cách sử dụng Listview, nó rất dễ sử dụng, nhiều chức năng, trực quan, và có thẩm mỹ (Có Header, có đường lưới của hàng, cột, có thể thay đổi màu từng hàng và từng cột, có thể Format cho từng cột - căn phải, trái, đậm nhạt . . )

Cái này chỉ là góp ý, nếu thấy thích thì bạn có thể thử làm, chỗ nào cần mình giúp thì mình sẽ giúp bạn.

Chúc mau tiến bộ.

Thân!
thực ra tôi dang làm ở dạng thô nên chưa chỉnh sửa. các textbox tên của nó thay vì đẻ dang gợi nhớ nhưng tôi lại để theo default.
listview tôi chưa làm nhưng nếu hay hơn thì tôi sẽ thử cái cho biết.
 
Upvote 0
Thư viện nào có Listview? Trên máy tôi kg có thì phải.
 
Upvote 0
Nó có sẵn khi cài MS Office rồi, bạn kiểm tra lại xem sao.
 
Upvote 0
Chờ mình gửi sau nhé. Lần trước chỉ là một điều khiển thôi, cài bổ xung mà.
Bạn tham khảo bài này, mình thấy nó hợp với ý bạn nhưng còn một số vấn đề cần tham khảo nên mình Post theo chủ đề riêng
http://www.giaiphapexcel.com/forum/showthread.php?t=13367
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom