Xin hỏi một số vấn đề về xử lý trên Form

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ó tạo 1 form dùng để chọn và copy data từ 1 sh này sang 1 sh khác.
Trên Fr tôi dùng 2 listbox để show data. Tôi còn 1 vài vấn đề cần sự góp ý của các bạn để hoàn thiện.
Thực sự Mong các bạn(chạy form và quan sát) để góp ý́ và cho cách giải quyết:
1/Trên Listbox1 có 1 hoặc nhiều dòng trống (do trên data có dòng trống: dòng cộng nhóm chẳng hạn). Vậy để loại bỏ dòng trống này khi load Listbox ta làm thế nào?
2/Thêm dòng tiêu đề cho Listbox như thế nào? độ rộng trên Listbox có thể kéo rộng
và thu hẹp được không?. (Nếu dùng danh sách động thì được, nhưng nó không
linh hoạt và nó không refresh được sau mỗi lần cập nhật số liệu.)
3/Về trình bày các nút lệnh chưa đẹp và trực quan, vậy có hình ảnh để gán cho các nút lệnh đó, ví dụ nút add có hình >> (trên form của tôi theo chiều đứng nên không dùng được >>)
Mong các bạn quan tâm.
 
Lần chỉnh sửa cuối:
1-Để phục vụ nạp bạn nên nạp twngf dòng 1. Khi lọc dòng nào đủ điều kiện thì nạp, còn lại bỏ qua.
2-Trong Properties set HeadColumn=True, List sẽ lấy dòng đầu làm tiêu đề.
3-Đổi độ rộng cột chọn Column Withd quy định độ rộng từung cột, mỗi cột cách nhau ;
 
Upvote 0
Một số bitmap và icon, dùng cho nút lệnh,
 

File đính kèm

Upvote 0
Nên:

- Sử dụng UserForm_Activate thay vì UserForm_Initialize
- Gõ tiéng Việt ở nút lệnh Command
- Bỏ ngay On Error GoTo loi vì rất nguy hiểm dễ sai sót. Chỉ dùng khi chương trình hoàn thiện.

PHP:
Private Sub UserForm_Activate()
    'On Error GoTo loi
    rc01 = Sheet1.Range("E65432").End(xlUp).Row
    rc02 = Sheet2.Range("D65432").End(xlUp).Row
    Sheet2.Range("D:D").NumberFormat = "@"
    With Me
        .txtName.Enabled = False
        .optName.Value = False
        .optId.Value = True
        .txtId.Enabled = True
        .txtId.BackColor = &H80000005
        .txtName.BackColor = &H8000000F
        .txtId.SetFocus
        .txtId1 = ""
        UpdateDs_List
        UpdateDs1_List
    End With
'loi:

End Sub

Sửa lại code ví dụ:

PHP:
Private Sub UpdateDs_List()
    Dim STT As Integer
    STT = 0
    For r = 3 To rc01 - 3
        If Not IsEmpty(Sheet1.Cells(r, 5)) Then
            With Me
                .lbDs.AddItem
                .lbDs.List(STT, 0) = Sheet1.Cells(r, 1)
                .lbDs.List(STT, 1) = Sheet1.Cells(r, 3)
                .lbDs.List(STT, 2) = Sheet1.Cells(r, 4)
                .lbDs.List(STT, 3) = Sheet1.Cells(r, 5)
                .lbDs.List(STT, 4) = Sheet1.Cells(r, 6)
                .lbDs.List(STT, 5) = Sheet1.Cells(r, 8)
            End With
            STT = STT + 1
        End If
    Next
End Sub

Tham khảo mẫu Form:

VBACad.jpg
 
Lần chỉnh sửa cuối:
Upvote 0
- Sử dụng UserForm_Activate thay vì UserForm_Initialize

Mong PhanTuHuong giải thích chi tiết lý do giùm, mình thấy nhiều bài viết kể cả của anh Duyệt từ hồi đăng trên Thế giới vi tính vẫn dùng Event này mà.
 
Upvote 0
Mong PhanTuHuong giải thích chi tiết lý do giùm, mình thấy nhiều bài viết kể cả của anh Duyệt từ hồi đăng trên Thế giới vi tính vẫn dùng Event này mà.

- UserForm_Activate: Sự kiện UserForm được kích hoạt.
- UserForm_Initialize: : Sự kiện UserForm được kích hoạt lần đầu tiên.
 
Upvote 0
Nên:

- Sử dụng UserForm_Activate thay vì UserForm_Initialize
- Gõ tiéng Việt ở nút lệnh Command
- Bỏ ngay On Error GoTo loi vì rất nguy hiểm dễ sai sót. Chỉ dùng khi chương trình hoàn thiện.

PHP:
Private Sub UserForm_Activate()
    'On Error GoTo loi
    rc01 = Sheet1.Range("E65432").End(xlUp).Row
    rc02 = Sheet2.Range("D65432").End(xlUp).Row
    Sheet2.Range("D:D").NumberFormat = "@"
    With Me
        .txtName.Enabled = False
        .optName.Value = False
        .optId.Value = True
        .txtId.Enabled = True
        .txtId.BackColor = &H80000005
        .txtName.BackColor = &H8000000F
        .txtId.SetFocus
        .txtId1 = ""
        UpdateDs_List
        UpdateDs1_List
    End With
'loi:

End Sub
Sửa lại code ví dụ:

PHP:
Private Sub UpdateDs_List()
    Dim STT As Integer
    STT = 0
    For r = 3 To rc01 - 3
        If Not IsEmpty(Sheet1.Cells(r, 5)) Then
            With Me
                .lbDs.AddItem
                .lbDs.List(STT, 0) = Sheet1.Cells(r, 1)
                .lbDs.List(STT, 1) = Sheet1.Cells(r, 3)
                .lbDs.List(STT, 2) = Sheet1.Cells(r, 4)
                .lbDs.List(STT, 3) = Sheet1.Cells(r, 5)
                .lbDs.List(STT, 4) = Sheet1.Cells(r, 6)
                .lbDs.List(STT, 5) = Sheet1.Cells(r, 8)
            End With
            STT = STT + 1
        End If
    Next
End Sub
Tham khảo mẫu Form:

VBACad.jpg
1/Vấn đề 1. sau khi trao đổi với tiger tôi đã xử lý xong.
2/Vấn đề thứ 2: Tôi đã đọc trên diễn đàn. Việc sử dụng Listbox thì không thực hiện được (tạo dòng tiêu đề của listbox bằng dòng tiêu đề trên sheet/kéo dãn-thu nhỏ độ rộng cột listbox trong chế độ form active, mà sử dụng listview thì máy tôi sao kg có thành phần này)
3/Tạo giao diện đẹp như form mẫu ở trên tôi chưa làm đươc:
- nạp font unicode để caption của nút lệnh là tiếng việt tôi chưa làm được? Các ảnh trực quan gán cho nút lệnh (hình cây viết/quyển sách mở/dấu tích, ...) tôi kg có, PTH có thì cho tôi xin.
Mong giúp đỡ thêm.
 
Upvote 0
Bạn load file lên mình ad vào cho, bạn tải về là có vì bạn xem được ở các file khác (Nhớ ghi rõ ad vào Form nào)
 
Upvote 0
Tạo form tra tồn kho mã phụ tùng

Chào các bác, em mới tập tành làm form nhưng hiện giờ đang mắc ở chỗ này. Em có file đính kèm hiện đang muốn làm một form để tra tồn kho phụ tùng theo mã ( mã số, số lượng của từng mã, vị trí lưu kho...) nhưng nghĩ mãi mà vẫn chưa biết cách làm. Cao thủ nào có thể chỉ bảo em được không ạh.Em cảm ơn
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom