Làm thế nào để tạo form nhập liệu + lọc dữ liệu bằng VBA (1 người xem)

  • Thread starter Thread starter tuanvm
  • Ngày gửi Ngày gửi
Liên hệ QC

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

tuanvm

Thành viên mới
Tham gia
9/11/07
Bài viết
7
Được thích
0
Chào các bạn trong GPE.
Mình đã tìm nhiều tài liệu trong GPE trước khi đặt câu hỏi và cũng đã làm được 1 phần trong file của mình.
Tuy nhiên còn một số chỗ thì không thể tự làm đựoc (sử dụng VBA). Mình cũng đã thử chép code về sửa nhưng không đúng gì cả. Trước có học Pascal nhưng quên hết mất rồi..
Dữ liệu của mình tương đối nhiều (khoảng 2000 dòng - mình tính theo dõi trong 1 năm) nên có vẻ như dùng công thức thì file sẽ khá nặng. Vậy nên mình muốn nhờ các bạn trên diễn đàn giúp bằng VBA, sau đó tự nghiên cứu chắc sẽ hiểu thêm VBA chút ít:
1. Form nhập liệu cập nhật dữ liệu vào sheet 'Don hang'
2. Sheet 'Thong ke' lọc lấy dữ liệu từ sheet 'Don hang' theo mã KH và số quản lý.
Rất mong nhận được sự giúp đỡ của mọi người. Cám ơn nhiều.
 

File đính kèm

Đã có nhiều người xem nhưng chưa có ai ra tay giúp đỡ... Buồn thế.
 
Bạn làm như sau:

1/ Copy Code sau vào Module

Mã:
Sub ThongKe()
    Dim Arr, Res
    Dim iR As Long, jC As Long, k As Long, MaKH As String
    Arr = Sheets("Don hang").Range("A13:R" & Sheets("Don hang").Range("A65536").End(3).Row)
    MaKH = Sheets("Thong ke").[B8]
    ReDim Res(1 To UBound(Arr, 1), 1 To UBound(Arr, 2))
    For i = 1 To UBound(Arr, 1)
        If Arr(i, 3) = MaKH Then
            k = k + 1
            For j = 1 To 18
                Res(k, j) = Arr(i, j)
            Next
        End If
    Next
    Sheets("Thong Ke").[A13:R65536].ClearContents
    Sheets("Thong Ke").[A13].Resize(k, 18) = Res
End Sub


Sub NhapLieu()
    Sheets("Nhap lieu").[A13:R13].Copy Sheets("Don hang").Range("A65536").End(3).Offset(1, 0)
End Sub

2/ Tại code của sheet Thong ke copy code sau

Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$B$8" Then
        Call ThongKe
    End If
End Sub

3/ Nút nhập dữ liệu tại sheet Nhap Liêu thì sử dụng Sub NhapLieu đã chèn tại Module

Bạn đã tìm hiểu VBA lại biết qua Passcal chắc là sẽ làm được.

Bài này bạn post tại box lập trình với Excel thì sẽ có câu trả lời nhanh hơn và phù hợp nội dung hỏi hơn.
 
- Sau khi nhập liệu ở sheet NhapLieu và nhấn nút sẽ nhập dữ liệu vào sheet THEODOI_KHACHHANG.
- Sau khi cập nhật ở sheet Don hang xong sang các sheet khách hàng và nhấn nút Lọc .....của từng sheet sẽ được kết quả lọc.

Xem File:
 

File đính kèm

- Sau khi nhập liệu ở sheet NhapLieu và nhấn nút sẽ nhập dữ liệu vào sheet THEODOI_KHACHHANG.
- Sau khi cập nhật ở sheet Don hang xong sang các sheet khách hàng và nhấn nút Lọc .....của từng sheet sẽ được kết quả lọc.

Xem File:
Nếu lọc theo từng sheet thì sao không lấy sheet Name làm điều kiện lọc? dhn46 nghĩ nếu có 50 khách hàng thì sẽ bớt công viết đi rất nhiều với cách bố trí như thế này.
 
Cám ơn mọi người đã giúp đỡ. Mình sẽ nghiên cứu tiếp.
 
Nếu lọc theo từng sheet thì sao không lấy sheet Name làm điều kiện lọc? dhn46 nghĩ nếu có 50 khách hàng thì sẽ bớt công viết đi rất nhiều với cách bố trí như thế này.

Nếu lọc cở vài trăm khách hàng thì tôi dùng kiểu khác để lọc, sau đó tạo ra sheet mới và đặt tên sheet theo tên từng khách hàng.

Cũng có thể đặt 1 Name cho danh sách khách hàng, sau đó dùng Validation để lọc theo từng khách hàng trong 1 sheet, nhưng thấy tác giả để riêng các sheet tôi nghĩ tác giả cần dùng riêng từng sheet nên làm theo kiểu như File trên.
 
Lần chỉnh sửa cuối:
Tôi đã làm hiện được UserForm lên rồi còn cái (Chọn vào công việc hiện trong UserForm để tự chèn ra dòng tương ứng) trong bảng thì thực sự mù tịt ko làm được mong mọi người giúp đỡ. Xim cám ơn
 

File đính kèm

PHP:
Private sArray(), Dic As Object
Dim lbID As Integer
Private Sub LBDMVT_Click()  'Nhâp DL Tù ListBox Lên Trang Tính      '
 Dim lRw As Long
 
 lbID = 1 + Me!LBDMVT.ListIndex
 lRw = [B65500].End(xlUp).Row + 1
 If Me!oBSL Then
    Cells(lRw, "A").Value = sArray(lbID, 1):                        Cells(lRw, "B").Value = sArray(lbID, 2)
    ' Ban Viêt Tiêp Nha     '
 End If
End Sub
Mã:
Private Sub UserForm_Initialize()
 '   On Error Resume Next   '
    sArray = Sheet1.Range("A3:K" & Sheet1.[A65536].End(xlUp).Row).Value
    LBDMVT.List() = sArray
    With LBDMVT
'        .List = sAray      '
        .ListStyle = fmListStyleOption
'        .MultiSelect = fmMultiSelectMulti     '
    End With
End Sub
 
Ban đã thương thì thương cho trọn giúp mình với để mình tham khảo cách viết và các câu lệnh xin cám ơn
 
Web KT

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

Back
Top Bottom