[VBA] Chuyển dữ liệu từ Sheet này qua Sheet khác và lưu lại.

Liên hệ QC

quananh9911

Thành viên mới
Tham gia
1/10/16
Bài viết
1
Được thích
0
Xin chào các anh chị. Em có vấn đề sau nhờ mọi người giúp đỡ với ạ.

Em có 1 file "TongHop" bao gồm 2 sheet. Sheet thứ nhất "DonHang" là những đơn đặt hàng từ khách hàng gửi cho em, cứ 1 dòng tương ứng với 1 đơn hàng. Sheet thứ hai "MauPhieuGiaoHang" là phiếu giao hàng em sẽ phải gửi cho nhà cung cấp để yêu cầu họ sản xuất.

Công việc của em hàng ngày là (1) nhận đơn hàng từ khách hàng (thường khoảng vài ngàn đơn - tương ứng vài ngàn dòng) sau đó (2) em copy những đơn này qua sheet "MauPhieuGiaoHang" mặc định 1 phiếu giao hàng là 200 đơn hàng - tương ứng 200 dòng. Tiếp theo (3) em lưu phiếu giao hàng này ra 1 file excel mới để gửi cho nhà cung cấp với tên gọi là "LHG"&mmyyyy-1 (trong đó LHG là tên riêng, mmyyyy là tháng năm lúc gửi đơn, -1 là thứ tự phiếu, những phiếu sau sẽ tiếp tục là -2,-3,....).
Em cứ làm tiếp tục đơn hàng thứ 201 đến 400, rồi lưu ra file LHGmmyyy-2 cho đến khi hết đơn hàng trong sheet DonHang thì xong. Ví dụ 1100 đơn hàng thì khi làm xong sẽ có 6 file (5 file 200 đơn và 1 file 100 đơn).

Vậy nhờ mọi người giúp đỡ cách nào viết code VBA để tự chuyển dữ liệu từ sheet DonHang qua sheet MauPhieuGiaoHang và lưu lại qua 1 file mới với tên gọi như trên được không ạ.
Em xin gửi kèm 1 file phiếu giao hàng em làm ví dụ sẵn. Cám ơn mọi người.
 

File đính kèm

  • TongHop.xlsm
    58.6 KB · Đọc: 11
  • LHG052020-1.xlsx
    25.2 KB · Đọc: 7
Xin chào các anh chị. Em có vấn đề sau nhờ mọi người giúp đỡ với ạ.

Em có 1 file "TongHop" bao gồm 2 sheet. Sheet thứ nhất "DonHang" là những đơn đặt hàng từ khách hàng gửi cho em, cứ 1 dòng tương ứng với 1 đơn hàng. Sheet thứ hai "MauPhieuGiaoHang" là phiếu giao hàng em sẽ phải gửi cho nhà cung cấp để yêu cầu họ sản xuất.

Công việc của em hàng ngày là (1) nhận đơn hàng từ khách hàng (thường khoảng vài ngàn đơn - tương ứng vài ngàn dòng) sau đó (2) em copy những đơn này qua sheet "MauPhieuGiaoHang" mặc định 1 phiếu giao hàng là 200 đơn hàng - tương ứng 200 dòng. Tiếp theo (3) em lưu phiếu giao hàng này ra 1 file excel mới để gửi cho nhà cung cấp với tên gọi là "LHG"&mmyyyy-1 (trong đó LHG là tên riêng, mmyyyy là tháng năm lúc gửi đơn, -1 là thứ tự phiếu, những phiếu sau sẽ tiếp tục là -2,-3,....).
Em cứ làm tiếp tục đơn hàng thứ 201 đến 400, rồi lưu ra file LHGmmyyy-2 cho đến khi hết đơn hàng trong sheet DonHang thì xong. Ví dụ 1100 đơn hàng thì khi làm xong sẽ có 6 file (5 file 200 đơn và 1 file 100 đơn).

Vậy nhờ mọi người giúp đỡ cách nào viết code VBA để tự chuyển dữ liệu từ sheet DonHang qua sheet MauPhieuGiaoHang và lưu lại qua 1 file mới với tên gọi như trên được không ạ.
Em xin gửi kèm 1 file phiếu giao hàng em làm ví dụ sẵn. Cám ơn mọi người.
Góp ý cho bạn:
1/ Nên có 1 sheet chứa danh mục hàng, khách hàng, Đơn vị giao hàng để đưa vào Form.
2/ 1 sheet Dat_Hang (gọi là SheetForm) khi khách hàng đặt hàng thì nhập liệu vào sheet này rồi lưu dữ liệu vào sheet DonHang.
3/ Truy vấn khách hàng vào MauPhieuGiaoHang chọn danh mục hàng và nhập liệu hàng loạt hàng hóa.
4/ Xuất lệnh giao hàng ra File mới đồng thời lưu dữ liệu vào sheet TheoDoi_DonHang.
5/ Trong File tôi có thiết kế sơ bộ để thuận tiện cho việc theo dõi.
 

File đính kèm

  • Theo Doi Don Hang.xlsm
    68.8 KB · Đọc: 24
Lần chỉnh sửa cuối:
Upvote 0
Xin chào các anh chị. Em có vấn đề sau nhờ mọi người giúp đỡ với ạ.

Em có 1 file "TongHop" bao gồm 2 sheet. Sheet thứ nhất "DonHang" là những đơn đặt hàng từ khách hàng gửi cho em, cứ 1 dòng tương ứng với 1 đơn hàng. Sheet thứ hai "MauPhieuGiaoHang" là phiếu giao hàng em sẽ phải gửi cho nhà cung cấp để yêu cầu họ sản xuất.

Công việc của em hàng ngày là (1) nhận đơn hàng từ khách hàng (thường khoảng vài ngàn đơn - tương ứng vài ngàn dòng) sau đó (2) em copy những đơn này qua sheet "MauPhieuGiaoHang" mặc định 1 phiếu giao hàng là 200 đơn hàng - tương ứng 200 dòng. Tiếp theo (3) em lưu phiếu giao hàng này ra 1 file excel mới để gửi cho nhà cung cấp với tên gọi là "LHG"&mmyyyy-1 (trong đó LHG là tên riêng, mmyyyy là tháng năm lúc gửi đơn, -1 là thứ tự phiếu, những phiếu sau sẽ tiếp tục là -2,-3,....).
Em cứ làm tiếp tục đơn hàng thứ 201 đến 400, rồi lưu ra file LHGmmyyy-2 cho đến khi hết đơn hàng trong sheet DonHang thì xong. Ví dụ 1100 đơn hàng thì khi làm xong sẽ có 6 file (5 file 200 đơn và 1 file 100 đơn).

Vậy nhờ mọi người giúp đỡ cách nào viết code VBA để tự chuyển dữ liệu từ sheet DonHang qua sheet MauPhieuGiaoHang và lưu lại qua 1 file mới với tên gọi như trên được không ạ.
Em xin gửi kèm 1 file phiếu giao hàng em làm ví dụ sẵn. Cám ơn mọi người.


Hôm nay mới đọc bào
MÌnh có 1 số góp ý nhỏ:
Mình nghĩ nếu bạn nhờ 1 người nào đó viết dùm Code VBA thì cũng nên có cơ sở để xem lại kết quả. Trên đây là demo của mình. Đầu tiên mình sẽ copy data ra nhiều sheet tương ứng với mỗi đơn hàng gửi đi. Sau đó sẽ New Workbook ra và hoàn thành đơn hàng theo mỗi workbook.
-Làm đơn hàng ngày chỉ cần bạn chỉnh lại số liệu trong Sheet đơn hàng và số liệu ngày gửi là được còn lại VBA tự xử lý rồi.
DO vì mới tiếp xúc excel chưa lâu kiến thức còn hạn hẹp nên mình mới chỉ làm được phần đầu đó là đưa dữ liệu ra các sheet đơn hàng.
Group có rất nhiều người giỏi sẽ giúp bạn hoàn thành phần tiếp theo!
C:
Sub CopytoSheet()
t = Timer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual

Dim TargetWs As Worksheet, Ws As Worksheet
Dim iR As Long, itemcopySheet As Integer
Dim ArrDulieu()
Set TargetWs = ThisWorkbook.Sheets("DonHang")

 For Each Ws In ThisWorkbook.Sheets
    If Ws.Name Like "LHG*" Then
        Ws.Delete
    End If
 Next
   '-------------------------------->delete Sheet LHG da ton tai truoc do
  
With TargetWs
      iR = .Range("A" & Rows.Count).End(3).Row
      itemcopySheet = IIf((iR Mod 200) > 0, Int(iR / 200) + 1, Int(iR / 200)) 'tinh so Sheet can coppy
  End With
 
 '-------------------------------->tao sheet LHG + ngay don gui + STT don gui + du lieu gui cua tung sheet
  For Each Ws In ThisWorkbook.Sheets
      If Ws.Name Like "MauPhieuGiaoHang" Then
        m = 4
        For i = 1 To itemcopySheet
          Ws.Copy After:=Ws
              With ActiveSheet
                  .Name = "LHG" & Format(ActiveSheet.[F5].Value, "mmyyyy") & "-" & i
                  Call Get_Arr(ArrDulieu, ThisWorkbook.Name, TargetWs.Name, m, 1, 200, 6)
                  .Range("A17").Resize(UBound(ArrDulieu, 1), 6) = ArrDulieu
                   Erase ArrDulieu
                End With
               m = m + 200
          Next
    End If
  Next
  TargetWs.Activate
  Application.Calculation = xlCalculationAutomatic
  Application.DisplayAlerts = True
  Application.ScreenUpdating = True
  MsgBox "Finish " & Format(Timer - t, "0.00") & "s", vbSystemModal, "Thông báo"
End Sub

Sub Get_Arr(ArrData As Variant, WorkbookName$, Workshetname$, sR, eR, toR, sCol)
  Dim TarGetWorkShet, TarGetWorkbook
  Set TarGetWorkbook = Application.Workbooks(WorkbookName)
  Set TarGetWorkShet = TarGetWorkbook.Sheets(Workshetname)
 
   With TarGetWorkShet
      If .AutoFilterMode Then .AutoFilter.ShowAllData
      
       ArrData = TarGetWorkShet.Cells(sR, eR).Resize(toR, sCol).Value
  End With
  End Sub
100587229_288315535659431_5731278847400214528_n.jpg
 

File đính kèm

  • TongHop (1).xlsm
    155.2 KB · Đọc: 18
Upvote 0
Web KT

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

Back
Top Bottom