Chèn nội dung vào cuối trang theo điều kiện

Liên hệ QC

♫ђöล♥ßล†♥†µ♫

Thành viên tiêu biểu
Tham gia
10/3/18
Bài viết
684
Được thích
1,443
Giới tính
Nữ
Nghề nghiệp
Worksheet Function trong VBA , Thư viện mã lập trình, Scripting.Dictionary, Sổ tay VBA, Các hàm dò tìm và tham chiếu
Em có 1 file xuất ra nhật ký thi công như file đính kèm. Tại Sheets("BieuNKTC") khi kích vào nút Spin thì sẽ lấy dữ liệu tương ứng với ngày tại ô K2 từ sheets("GhiNhatky") sang và chèn phần dữ liệu từ A10 đến A15 tại Sheets("TieudeghiNK") vào cuối mỗi trang.
Hiện tại thì em đã tập tành làm được 1 cái Code. Nhưng tốc độ của nó quá chậm. Do số lượng bản in lớn vì vậy Code đó không đáp ứng được
Kính mong các Anh(Chị), Thầy(Cô) xem giúp và viết lại hộ em Code thực hiện công việc trên với ạ
Em xin chân thành cám ơn ./
 

File đính kèm

  • Nhat Ky thi cong.xlsm
    89.6 KB · Đọc: 27
Lần chỉnh sửa cuối:
Sao tẳng có ai giúp em vậy hề . Hôm nay mà không xong được thì em chỉ có nước mà cầm ba lô đi theo Tây Ba Nha thôi . (@$%@
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Nếu yêu cầu chỉ như bài 1 thì dùng mail merge trong word là tiện nhất, không cần code. Nhưng trong code mình thấy bạn còn làm vài thứ khác, để cho nhanh thì bạn nên viết hết yêu cầu ra. Có thể dùng hàm match để nhảy đến dòng chứa ngày TC (chắc là ngày thi công), chỉ gán những dòng của ngày đó vào mảng để tránh nguy cơ lỗi out of memory và đỡ phải lặp nhiều lần.
 
Upvote 0
Nếu yêu cầu chỉ như bài 1 thì dùng mail merge trong word là tiện nhất, không cần code. Nhưng trong code mình thấy bạn còn làm vài thứ khác, để cho nhanh thì bạn nên viết hết yêu cầu ra. Có thể dùng hàm match để nhảy đến dòng chứa ngày TC (chắc là ngày thi công), chỉ gán những dòng của ngày đó vào mảng để tránh nguy cơ lỗi out of memory và đỡ phải lặp nhiều lần.
Dạ Cám ơn anh đã quan tâm
Nhưng nếu dùng mail merge trong word thì chắc không được vì cái phần đuôi mà mình cần gán lúc nào cũng phải ở dưới cùng của 1 trang (Đó là yêu cầu của TVGS anh ạ)
Còn yêu cầu của bài đính kèm trên em xin nêu cụ thể như sau:
1. Ở Sheets("BieuNKTC") Lấy dữ liệu tương ứng với ngày tại ô K2 từ sheets("GhiNhatky") sang (số ngày ô K2=Số ngày cột A thì lấy dữ liệu qua)
2. Fix chiều cao dòng dữ liệu vừa tìm được
3. Gán phần đuôi vào cuối trang ngắt
4. Xuất dữ liệu ra file pdf
Anh xem giúp em với ạ
 
Upvote 0
Nếu vậy thì mail merge vẫn được. Nhưng đây là diễn đàn GPE nên mình gợi ý thế này:
Code của bạn chậm 1 phần do định dạng lại dữ liệu ở sheet BieuNKTC, do sheet GhiNhatKy nội dung công việc đều nằm trong cột B nên bạn thiết kết lại sheet BieuNKTC, bỏ hết merge cell đi, đưa nội dung vào 1 cột giống sheet GhiNhatKy. Bên sheet GhiNhatKy căn chỉnh cho đúng mẫu in lần đầu, đến ngày nào chỉ cần copy paste sang mà không cần định dạng lại nữa.
 
Upvote 0
Nếu vậy thì mail merge vẫn được. Nhưng đây là diễn đàn GPE nên mình gợi ý thế này:
Code của bạn chậm 1 phần do định dạng lại dữ liệu ở sheet BieuNKTC, do sheet GhiNhatKy nội dung công việc đều nằm trong cột B nên bạn thiết kết lại sheet BieuNKTC, bỏ hết merge cell đi, đưa nội dung vào 1 cột giống sheet GhiNhatKy. Bên sheet GhiNhatKy căn chỉnh cho đúng mẫu in lần đầu, đến ngày nào chỉ cần copy paste sang mà không cần định dạng lại nữa.
Dạ. Cám ơn Anh nhiều. Để em thử theo gợi ý của anh xem sao ạ
 
Upvote 0
Em có 1 file xuất ra nhật ký thi công như file đính kèm. Tại Sheets("BieuNKTC") khi kích vào nút Spin thì sẽ lấy dữ liệu tương ứng với ngày tại ô K2 từ sheets("GhiNhatky") sang và chèn phần dữ liệu từ A10 đến A15 tại Sheets("TieudeghiNK") vào cuối mỗi trang.
Hiện tại thì em đã tập tành làm được 1 cái Code. Nhưng tốc độ của nó quá chậm. Do số lượng bản in lớn vì vậy Code đó không đáp ứng được
Kính mong các Anh(Chị), Thầy(Cô) xem giúp và viết lại hộ em Code thực hiện công việc trên với ạ
Em xin chân thành cám ơn ./
Tôi gợi ý cách làm thế này:
1/ Thiết kế lại tiêu đề cột của sheet GhiNhatky như hình.
2/ Dùng Advanced Filter lọc kết quả và gộp dữ liệu như hình.
3/ Lấy giá trị lọc được gán qua sheet BieuNKTC.
Sẽ nhanh lẹ, tốc độ code lại ngắn gọn. Với cách này có thể in nhật ký thi công hàng loạt chỉ cần gõ số bắt đầu in vào B2.

A_GoiY.JPGA_GoiY2.JPG
 
Lần chỉnh sửa cuối:
Upvote 0
Mình thử 1 đoạn code sau khi đã sửa lại sheet BieuNKTC, code chỉ thay đổi các phần 1, 2, 4, chưa làm phần 3 và 5 nhưng chắc 5 cũng tương tự. Bạn thay số ngày vào ô L5, bấm Alt-F8 chạy thử sub Test, sau đó bổ sung thêm code nối phần 5 và xuất ra pdf, hy vọng tốc độ cải thiện phần nào.
Mã:
Sub Test()
    Dim NgayThiCong&, n&, r As Range
    Sheets("BieuNKTC").Activate
    NgayThiCong = Range("L4") + Range("K1")
    On Error GoTo Thoat
    With Sheets("GhiNhatKy")
        n = Application.Match(NgayThiCong, .Columns(1), 0)
        Set r = Range(.Cells(n + 2, 2), .Cells(n, 2).End(xlDown))
    End With
    Range("A3") = "1. Ngày thi công:    " & CDate(NgayThiCong)
    Range("A4") = "2. " & Sheets("GhiNhatKy").Cells(n, 2)
    Range("A11:A10000").Clear
    r.Copy Range("A11")
    Rows("4:1000").AutoFit
Thoat:
End Sub
 

File đính kèm

  • Nhat Ky thi cong_test.xlsm
    85.7 KB · Đọc: 6
Upvote 0
Mình thử 1 đoạn code sau khi đã sửa lại sheet BieuNKTC, code chỉ thay đổi các phần 1, 2, 4, chưa làm phần 3 và 5 nhưng chắc 5 cũng tương tự. Bạn thay số ngày vào ô L5, bấm Alt-F8 chạy thử sub Test, sau đó bổ sung thêm code nối phần 5 và xuất ra pdf, hy vọng tốc độ cải thiện phần nào.
Mã:
Sub Test()
    Dim NgayThiCong&, n&, r As Range
    Sheets("BieuNKTC").Activate
    NgayThiCong = Range("L4") + Range("K1")
    On Error GoTo Thoat
    With Sheets("GhiNhatKy")
        n = Application.Match(NgayThiCong, .Columns(1), 0)
        Set r = Range(.Cells(n + 2, 2), .Cells(n, 2).End(xlDown))
    End With
    Range("A3") = "1. Ngày thi công:    " & CDate(NgayThiCong)
    Range("A4") = "2. " & Sheets("GhiNhatKy").Cells(n, 2)
    Range("A11:A10000").Clear
    r.Copy Range("A11")
    Rows("4:1000").AutoFit
Thoat:
End Sub
Ý em muốn là gán phần A1:I15 của Sheets("TieudeghiNK") (mục 5,6 và phần ký tên) vào cuối mỗi trang ngắt của Sheets("BieuNKTC"). (Cái phần khung màu xanh luôn lằm cuối trang) anh ạ
1530520714006.png
Bài đã được tự động gộp:

Tôi gợi ý cách làm thế này:
1/ Thiết kế lại tiêu đề cột của sheet GhiNhatky như hình.
2/ Dùng Advanced Filter lọc kết quả và gộp dữ liệu như hình.
3/ Lấy giá trị lọc được gán qua sheet BieuNKTC.
Sẽ nhanh lẹ, tốc độ code lại ngắn gọn. Với cách này có thể in nhật ký thi công hàng loạt chỉ cần gõ số bắt đầu in vào B2.

View attachment 198635View attachment 198636
Cái này theo mẫu của giám sát. Sai mẫu họ không ký cho ạ. -\\/.-\\/.-\\/.
 
Upvote 0
Ý em muốn là gán phần A1:I15 của Sheets("TieudeghiNK") (mục 5,6 và phần ký tên) vào cuối mỗi trang ngắt của Sheets("BieuNKTC"). (Cái phần khung màu xanh luôn lằm cuối trang) anh ạ
Cái này theo mẫu của giám sát. Sai mẫu họ không ký cho ạ.
Làm gì mà máy móc thế, nếu họ không thích thì ẩn cột A và B của sheet GhiNhatky đi thì là nguyên cái mẫu của họ.
Còn sheet BieuNKTC, thay gì mỗi nội dung 1 dòng thì tất cả nội dung nằm trong 1 dòng chứ có thay đổi mẫu đâu mà lo.

A_TieuDe.JPG
 
Upvote 0
Làm gì mà máy móc thế, nếu họ không thích thì ẩn cột A và B của sheet GhiNhatky đi thì là cái mẫu của họ.
Còn sheet BieuNKTC, thay gì mỗi nội dung 1 dòng thì tất cả nội dung nằm trong 1 dòng chứ có thay đổi mẫu đâu mà lo.

View attachment 198647
Dạ không ý mấy anh ây là trang nào cũng có phần đánh giá và ký tên và nó nằm ở dưới trang. Nếu dữ liệu nhiều thì san ra nhiều trang. Như kiểu mình in vào 1 cái Form chết ấy ạ. Mà sáng mai phải nộp hồ sơ mà cái Code bài 1 thì một phút nó mới in cho được 1 tờ. Gần 5 tháng thi công thì chết mất ạ
 
Upvote 0
Dạ không ý mấy anh ây là trang nào cũng có phần đánh giá và ký tên và nó nằm ở dưới trang. Nếu dữ liệu nhiều thì san ra nhiều trang. Như kiểu mình in vào 1 cái Form chết ấy ạ. Mà sáng mai phải nộp hồ sơ mà cái Code bài 1 thì một phút nó mới in cho được 1 tờ. Gần 5 tháng thi công thì chết mất ạ
Thì nội dung phần dưới vẫn y nguyên, Khi in thì nó tự thay đổi D2, D3 và tất cả nội dung công việc của 1 ngày chỉ nằm trọn trong dòng 10, nếu lọc mà dữ liệu ít hoặc nhiều thì nó tự động co giản theo.

A_In.JPG
 
Lần chỉnh sửa cuối:
Upvote 0
Thì nội dung phần dưới vẫn y nguyên.
Còn tất cả công việc của 1 ngày chỉ nằm trọn trong dòng 10, nếu lọc mà dữ liệu ít hoặc nhiều thì nó tự động co giản theo.

View attachment 198649
Dạ. Có ngày tới ba mấy nội dung cơ ạ. Nếu nó nhiều thì đẩy ra nhiều hơn 1 trang thì phần chữ ký không còn nằm ở dưới các trang (trừ trang cuối ) ạ
 
Upvote 0
Em có 1 file xuất ra nhật ký thi công như file đính kèm. Tại Sheets("BieuNKTC") khi kích vào nút Spin thì sẽ lấy dữ liệu tương ứng với ngày tại ô K2 từ sheets("GhiNhatky") sang và chèn phần dữ liệu từ A10 đến A15 tại Sheets("TieudeghiNK") vào cuối mỗi trang.
Hiện tại thì em đã tập tành làm được 1 cái Code. Nhưng tốc độ của nó quá chậm. Do số lượng bản in lớn vì vậy Code đó không đáp ứng được
Kính mong các Anh(Chị), Thầy(Cô) xem giúp và viết lại hộ em Code thực hiện công việc trên với ạ
Em xin chân thành cám ơn ./
Có những lệnh không rỏ lắm nên không chỉnh
 

File đính kèm

  • Nhat Ky thi cong.xlsm
    86.1 KB · Đọc: 20
Upvote 0
Dạ. Có ngày tới ba mấy nội dung cơ ạ. Nếu nó nhiều thì đẩy ra nhiều hơn 1 trang thì phần chữ ký không còn nằm ở dưới các trang (trừ trang cuối ) ạ
Có nghĩa là mỗi trang đều phải có chữ ký hay sao tôi không hiểu, trước đây tôi làm báo cáo hay biên bản với vài chục trang nhưng chỉ in phần kết luận và các chữ kỹ chỉ ở phần cuối trang.
 
Upvote 0
Có nghĩa là mỗi trang đều phải có chữ ký hay sao tôi không hiểu, trước đây tôi làm báo cáo vài chục trang nhưng chỉ in phần kết luận và các chữ kỹ chỉ ở phần cuối trang.
Dạ mỗi trang đều có phần đánh giá, chữ ký (mục 5, 6 và phần chữ ký) như hình bài 12 ạ
Bài đã được tự động gộp:

Có những lệnh không rỏ lắm nên không chỉnh
Cám ơn Anh. Tốc độ nhanh hơn Code bài 1 rồi ạ. Chắc chậm là do chỉnh chiều cao dòng anh nhỉ. Em lấy Code của anh làm để nộp hồ sơ cho họ cái đã. Không thì theo Anh "Tây bán nhà" mất :p:p:p
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom