Dùng hàm gì để tạo Thẻ khách nợ (1 người xem)

Liên hệ QC

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

tungvu83

Thành viên mới
Tham gia
16/2/12
Bài viết
43
Được thích
0
Ca này khó quá xin các cao thủ chỉ bảo
Tôi muốn khi chọn 1 mã quản lý thì các chi tiết của mã này chạy xuống phần dưới như trong file đính kèm
Phần tiền có 2 loại là tiền điện và vô công. Khi trả khách hàng cũng trả riêng 2 loại
Tôi tìm được mấu thẻ kho này hay quá nhưng không tìm cách ứng dụng được
Xin mọi người giúp đỡ!
 

File đính kèm

Có ai biết giúp tôi với. Tôi đang rất cần
 
Có bác nào biết xin giúp đỡ. Tôi xin đa tạ
 
:D chắc giờ hết cần rồi.
 
Có chứ. Vẫn đang đợi sự trợ giúp đây. Bạn giúp tôi với
 
Trong file của bạn ở sheet Tra_tien thiếu cột VC, tôi bổ sung thêm cột này để đúng với yêu cầu ban đầu (Phat sinh và Tra tien đều theo 2 loại)
Ngoài ra tôi thêm 1 sheet (Temp) để tính dữ liệu lọc trước khi chuyển vào phiếu.
Có đặt các tên sau: Phat_sinh, Tra_tien, TheKN (bạn xem chi tiết trong file)
Click vào chọn mã quản lý để thực hiện.
 

File đính kèm

Trong file của bạn ở sheet Tra_tien thiếu cột VC, tôi bổ sung thêm cột này để đúng với yêu cầu ban đầu (Phat sinh và Tra tien đều theo 2 loại)
Ngoài ra tôi thêm 1 sheet (Temp) để tính dữ liệu lọc trước khi chuyển vào phiếu.
Có đặt các tên sau: Phat_sinh, Tra_tien, TheKN (bạn xem chi tiết trong file)
Click vào chọn mã quản lý để thực hiện.


Cảm ơn rất rất nhiều nhưng bạn đã giúp thì xin giúp cho chót được không. Bạn hướng dẫn tôi cách làm với. Hướng dẫn sơ qua cũng được. Vì nhìn bạnlàm như thế này mà tôi không tự làm được thì tôi cũng không ứng dụng được.
Xin cám ơn rất nhiều
 
Để áp dụng, bạn cần chuẩn bị các nội dung sau:
1. Có 1 sheet đặt tên là Temp (để lưu tạm nội dung - yêu cầu phải có để chương trình chạy được)
2. Có 1 sheet chứa Mã khách hàng và các thông tin liên quan. Riêng cột mã đặt tên là MaQL để tạo list khi chọn mã quản lý
3. Sheet Phat_sinh chứa dữ liệu (Nợ) (nhập bắt đầu từ ô A1): có 7 cột theo như file mẫu của bạn. Và nhớ đặt tên cho vùng dữ liệu này là Phat_sinh (trùng với tên sheet cho dễ xử lý)
4. Sheet Tra_tien chứa dữ liệu (Có) (nhập bắt đầu từ ô A1): có 7 cột theo như file mẫu của bạn. Và nhớ đặt tên cho vùng dữ liệu này là Tra_tien (trùng với tên sheet cho dễ xử lý)
5. Sheet cuối cùng là Thẻ khách nợ, đặt tên là TheKN (trong file mẫu có 6 cột), vùng chứa dữ liệu lọc bắt đầu từ ô A10 (trong file của tôi đã ẩn dòng này), và đặt tên cho vùng này là TheKN (vùng A10:F25 - sau này nếu 1 khách hàng cần nhiều hơn thì bạn nên kéo dài đến khoảng F50 chẳng hạn)
Ở ô nhập mã quản lý, tôi đã đặt tên cho ô là MaKH.
Sau khi chuẩn bị đầy đủ các yêu cầu trên, bạn chỉ cần mở VBE (Alt-F11), duble-click vào sheet TheKN ở cửa sổ Project (trong file mẫu, sheet này có tên mã là sheet4) và paste đoạn mã sau:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sPS As Worksheet, sTT As Worksheet, sThe As Worksheet, sTemp As Worksheet
Dim rPS As Range, rTT As Range, rThe As Range, rTemp As Range, rMaKH As Range
Dim iR As Long, iR2 As Long, aKQ()
    Set rMaKH = Me.Range("MaKH")
    If Intersect(Target, rMaKH) Is Nothing Then Exit Sub
    If rMaKH = "" Then Exit Sub
With Application
.ScreenUpdating = False
    Set sPS = Worksheets("Phat_sinh")
    Set rPS = sPS.Range("Phat_sinh")
    Set sTT = Worksheets("Tra_tien")
    Set rTT = sTT.Range("Tra_tien")
    Set sThe = Worksheets("TheKN")
    Set rThe = sThe.Range("TheKN")
    Set sTemp = Worksheets("Temp")
    Set rTemp = sTemp.Range("A1")
    
    sTemp.Cells.ClearContents
    sPS.AutoFilterMode = False
    rPS.AutoFilter field:=1, Criteria1:=rMaKH
    rPS.SpecialCells(xlCellTypeVisible).Copy
    rTemp.PasteSpecial (xlPasteValues)
    Set rTemp = rTemp.End(xlDown).Offset(1)
    rTemp.PasteSpecial (xlPasteValues)
    rTemp.Rows(1).EntireRow.Delete
    
    Set rTemp = sTemp.Range("A1").CurrentRegion
    iR = rTemp.Rows.Count
    
    rTemp.Range("E2:E" & ((iR + 1) / 2)).Copy _
    rTemp.Range("D2:D" & ((iR + 1) / 2))
    rTemp.Range("E2:E" & iR).ClearContents
    For i = 2 To (iR + 1) / 2
        sTemp.Cells(i, 7) = sTemp.Cells(i, 7) & "-VC"
    Next
    For i = 1 + ((iR + 1) / 2) To iR
        sTemp.Cells(i, 7) = sTemp.Cells(i, 7) & "-TD"
    Next
    
    Set rTemp = sTemp.Range("A1").End(xlDown).Offset(1)
    
    sTT.AutoFilterMode = False
    rTT.AutoFilter field:=1, Criteria1:=rMaKH
    rTT.SpecialCells(xlCellTypeVisible).Copy
    rTemp.PasteSpecial (xlPasteValues)
    Set rTemp = rTemp.End(xlDown).Offset(1)
    rTemp.PasteSpecial (xlPasteValues)
    rTemp.Rows(1).EntireRow.Delete
    sTemp.Rows(iR + 1).EntireRow.Delete
    Set rTemp = sTemp.Range("A1").CurrentRegion.Offset(iR)
    iR2 = rTemp.Rows.Count
    sTemp.Range("D" & (iR + 1) & ":D" & ((iR2 - iR) / 2 + iR)).Copy _
    sTemp.Range("E" & (iR + 1) & ":E" & ((iR2 - iR) / 2 + iR))
    sTemp.Range("D" & (iR + 1) & ":D" & iR2).ClearContents
    
    For i = iR + 1 To (iR2 - iR) / 2 + iR
        sTemp.Cells(i, 7) = sTemp.Cells(i, 7) & "-TD"
    Next
    For i = 1 + ((iR2 - iR) / 2) + iR To iR2
        sTemp.Cells(i, 7) = sTemp.Cells(i, 7) & "-VC"
    Next
    sTemp.Activate
    Set rTemp = sTemp.Range("A1").CurrentRegion
    rTemp.Sort key2:=rTemp.Range("G1"), key1:=rTemp.Range("F1"), key3:=rTemp.Range("D1"), order3:=xlDescending, Header:=xlYes
    rTemp.Cells(1).Select
    For i = iR2 To 2 Step -1
        If Trim(rTemp.Cells(i, 4)) = "" And Trim(rTemp.Cells(i, 5)) = "" Then
            rTemp.Cells(i, 1).EntireRow.Delete
        End If
    Next
    rTemp.Columns(6).Copy rTemp.Columns(3)
    rTemp.Columns(1).EntireColumn.Delete
    iR = rTemp.Rows.Count
    With rTemp.Offset(1, 0).Resize(iR - 1).Columns(5)
        .Formula = "= C2 - D2 + max(E1)"
        .Value = .Value
    End With
    rTemp.Cells(1, 1).EntireRow.Delete
    sThe.AutoFilterMode = False
    With rThe
        .Cells.ClearContents
        .Cells(1, 2) = "NgayThang"
        rTemp.Copy
        .Cells(2, 1).PasteSpecial (xlPasteValues)
        .AutoFilter field:=2, Criteria1:="<>"
        .Rows(1).EntireRow.Hidden = True
    End With
    sThe.Activate
    rMaKH.Select
    
    Set sPS = Nothing
    Set rPS = Nothing
    Set sTT = Nothing
    Set rTT = Nothing
    Set sThe = Nothing
    Set rThe = Nothing
    Set sTemp = Nothing
    Set rTemp = Nothing
.CutCopyMode = False
.ScreenUpdating = True
End With
End Sub
Và nhớ là khi dùng file có macro thì set quyền cho phép nó thực hiện.
Chúc bạn thành công!
 

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

Back
Top Bottom