Giúp đỡ viết macro cập nhật các sheet phụ vào sheet tổng hợp!!

Liên hệ QC

kingempty

Thành viên mới
Tham gia
29/6/10
Bài viết
7
Được thích
1
Các cao thủ macro ơi, viết giùm mình cái macro để cập nhật các sheet phụ qua sheet tổng hợp nha.
Yêu cầu đặt ra là:
+ Sheet phụ có thể trong một ngày có nhiều lần nhập và xuất
+ Sheet tổng hợp chỉ cập nhật tổng nhập và xuất trong ngày hôm đó của sheet phụ
+ Trong một ngày có thể có sheet có xuất và nhập, và có sheet không xuất và nhập

Giải thuật mình đặt ra là:
+ Trường hợp có thể tạo ngày mới bằng code
Khi gọi hàm cập nhật của sheet phụ, thì việc đầu tiên sẽ kiểm tra bên sheet chính có ngày mới chưa, nếu chưa có thì tạo ngày mới, ứng với ngày của sheet phụ, nếu có rồi thì sum xuất và nhập trong cùng ngày đó rồi nhập vào sheet tổng hợp.

+ Trường hợp không thể tạo ngày mới bằng code (Truong hợp này ta tạo sẵn ngày bên sheet tổng hợp)
Khi gọi hàm cập nhật của sheet phụ thì công việc là: sum xuất và nhập trong cùng ngày của sheet phụ, rồi sau đó add qua bên sheet tổng hợp tương ứng với ngày bên sheet phụ (ngày đã được tạo sẵn).

Mình gà VBA quá nên không thể viết được như mình mong muốn. Mong các bạn có thể giúp mình!
File mình đã đính kèm phía dưới, các bạn coi sẽ hiểu!
Thanks!
 

File đính kèm

Giải fáp với sự hỗ trợ của DSUM()

PHP:
Option Explicit
 Dim Dat As Date
 Dim Nhap As Double, Xuat As Double, Ton As Double
Sub THop()
 Dim Sh As Worksheet, Sth As Sheet1, Rng As Range, sRng As Range
 Dim Rws As Long
 
 Dat = InputBox("Ban Hay Nhap Ngay:", "MM/DD/YYYY", Date - 1)
 Set Sth = Sheets("THop")
 Set Rng = Sth.Range(Sth.[B4], Sth.[B65500].End(xlUp))
 Set sRng = Rng.Find(Dat, , xlFormulas, xlWhole)
 If Not sRng Is Nothing Then
   MsgBox "Da Có Ngày Này":                  Rws = sRng.Row
 Else
   Rws = Sth.[B65500].End(xlUp).Row + 1
   Cells(Rws, "B").Value = Dat
 End If
 Set Rng = Sth.Range(Sth.[C3], Sth.[iv3].End(xlToLeft).Offset(, 4))
 
 For Each Sh In Worksheets
   If Sh.Name <> "THop" Then
      GPE Sh
      Set sRng = Rng.Find(Sh.Range(Sh.Name).Value, , xlValues, xlPart)
      If Not sRng Is Nothing Then
         With Sth.Cells(Rws, sRng.Column)
            .Value = Nhap:                   Nhap = 0
            .Offset(, 1).Value = Xuat:       Xuat = 0
            .Offset(, 2).Value = Ton:        Ton = 0
         End With
      Else
         MsgBox "Nothing"
      End If
   End If
 Next Sh
End Sub

PHP:
Sub GPE(Sh As Worksheet)
 Dim Rng As Range, Crit As Range
 
 Sh.Columns("A:B").Insert Shift:=xlToRight
 Sh.[A1].Value = Sh.[A8].Value:           Sh.[A2].Value = Dat
 Set Crit = Sh.Range("A1:A2")
 Set Rng = Sh.[D8].Resize(Sh.[D65500].End(xlUp).Row, 4)
 With Application.WorksheetFunction
   Nhap = .DSum(Rng, Sh.[e8], Crit)
   Xuat = .DSum(Rng, Sh.[f8], Crit):      Ton = .DSum(Rng, Sh.[g8], Crit)
   Sh.[b1] = Nhap:                        Sh.[b3] = Xuat
   Sh.[b5] = Ton
 End With
 Sh.Columns("A:B").Delete Shift:=xlToLeft
End Sub


Các lưu í cần thiết:

(*) Tên trang tính không nên có khoảng trắng hay xài chữ Việt có dấu;
Nhưng trên mỗi trang tính fụ fải có 1 ô được gán tên trùng với dòng 3 trên trang 'THop"
Ví dụ mình đã lấy ô [E5] ở trang 'Kem'' đem gán tên.

(*) Cẩn trọng với các ký tự đặc biệt ở dòng 3 thuộc 'THop' E rằng sẽ có thể gặp rắc rối & lúng túng.

(*) Hãy bỏ trộn các tiêu đề ở bảng fụ; Trộn như bạn thà đừng trộn, mà nới chiều cao 1 hàng thì hơn.

Hẹn gặp lại!
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom