Tự động ghi nhận phát sinh ở sheet khác

Liên hệ QC

thaibao77

Thành viên mới
Tham gia
4/11/07
Bài viết
12
Được thích
1
Chào các Bác,

Nhờ các Bác giúp dùm vấn đề sau: Giả sử có 1 đơn hàng phát sinh là số 1, khách hàng ABS mua 2 mặt hàng với từng số lượng tương ứng như trong File kèm theo.

Mình muốn nhập liệu theo dạng ở Sheet thứ 1 (Mỗi row là 1 đơn hàng, bao gồm nhiều mặt hàng), sau khi nhập xong, ở Sheet thứ 2 sẽ tự động cập nhật theo (Mỗi row là Mặt hàng. Nếu đơn hàng có nhiều mặt hàng thì sẽ có nhiều dòng).

Lý do: Ở Sheet thứ nhất dễ nhập liệu hơn, nhưng không thể tổng hợp và báo cáo (dùng Pivot Table) được. Mình nghĩ ở sheet 2 là cách nhập liệu chuẩn nhất.

Mình cũng đã nghĩ đến việc tạo FORM để nhập liệu, nhưng lực bất tòng tâm.+-+-+-+
Mong các Bác góp ý và chỉ vẻ giúp.

Xin cảm ơn nhiều.

PS: Mình đang sử dụng 2007, và cả 2 sheet là 2 table.
 

File đính kèm

Chào các Bác,

Nhờ các Bác giúp dùm vấn đề sau: Giả sử có 1 đơn hàng phát sinh là số 1, khách hàng ABS mua 2 mặt hàng với từng số lượng tương ứng như trong File kèm theo.

Mình muốn nhập liệu theo dạng ở Sheet thứ 1 (Mỗi row là 1 đơn hàng, bao gồm nhiều mặt hàng), sau khi nhập xong, ở Sheet thứ 2 sẽ tự động cập nhật theo (Mỗi row là Mặt hàng. Nếu đơn hàng có nhiều mặt hàng thì sẽ có nhiều dòng).

Lý do: Ở Sheet thứ nhất dễ nhập liệu hơn, nhưng không thể tổng hợp và báo cáo (dùng Pivot Table) được. Mình nghĩ ở sheet 2 là cách nhập liệu chuẩn nhất.

Mình cũng đã nghĩ đến việc tạo FORM để nhập liệu, nhưng lực bất tòng tâm.+-+-+-+
Mong các Bác góp ý và chỉ vẻ giúp.

Xin cảm ơn nhiều.

PS: Mình đang sử dụng 2007, và cả 2 sheet là 2 table.
Có lẽ ý bạn muốn mỗi lần nhập thì tự động chuyển dữ liệu sang sheet 2 luôn... nhưng tôi nghĩ không nên tự động kiểu này vì dể phát sinh lỗi và code phải chạy liên tục
Tôi đề xuất giải pháp nhập liệu xong, chạy code 1 lần duy nhất
PHP:
Sub TongHop()
  Dim Src As Range, MH As Range, Temp As Range
  Dim Cll1 As Range, Cll2 As Range, i As Long
  Dim NH As Worksheet, KQ As Worksheet
  Set NH = Sheets("Nhap"): Set KQ = Sheets("KQ")
  Set Src = NH.Range(NH.[A2], NH.[A65536].End(xlUp)).Resize(, 9)
  Set MH = Intersect(Src, Src.Offset(, 2)).Resize(1)
  KQ.Range("A3:D10000").ClearContents
  For Each Cll1 In Intersect(Src, Src.Offset(1, 1)).Resize(, 1)
    Set Temp = Cll1.Offset(, 1).Resize(, 7)
    If WorksheetFunction.CountBlank(Temp) < 7 Then
      For Each Cll2 In Temp.SpecialCells(2)
        With KQ.Range("A65536").End(xlUp).Offset(1)
          .Offset(, 0) = Cll1.Offset(, -1)
          .Offset(, 1) = Cll1
          .Offset(, 2) = Intersect(Cll2.EntireColumn, MH)
          .Offset(, 3) = Cll2
        End With
      Next Cll2
    End If
  Next Cll1
End Sub
Cứ nhập liệu bình thường, đến khi xong việc, bấm nút chạy code rồi sang sheet 2 xem kết quả nhé
(chẳng hiểu sao dùng SpecialCells lại không được, dù có bẫy lỗi nên tạm dùng COUNTBLANK)
Lưu ý:
- Tên sheet bạn đừng gõ tiếng Việt có dấu ---> Code VBA nó "kỵ" vụ này
 

File đính kèm

Upvote 0
Cám ơn bác ndu96081631 nhiều lắm. Để em về nghiên kíu lại cái này cho phù hợp với mong muốn của mình.

Sẵn đây cho hỏi luôn là em sử dụng 2 bảng nhập liệu là dạng Table, như vậy có ảnh hưởng gì không? Vì đối với Table trong 2007, có thể dùng Tên Table[fieldName] để xác định name động luôn. Nhờ bác chỉ vẽ thêm.

Cám ơn vì đã giúp đỡ.

NTB
 
Upvote 0
Web KT

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

Back
Top Bottom