Làm thế nào để in hàng hoạt trong excel (không thể dùng mail merge do kích thước mỗi bản khác nhau)

Liên hệ QC

phucnguyen1993

Thành viên mới
Tham gia
20/11/18
Bài viết
48
Được thích
7
Xin chào các members và anh/chị/em của diễn đàn ạ

Hiện em đang gặp khó khăn trong việc in ấn dữ liệu từ 1 file excel.
Mong các bro giúp đỡ.
Em cần in dữ liệu từ đầu đến cuối của file dữ liệu như đính kèm
-Mỗi lần in em bấm:
Chỗ số 1: (chọn bản ghi kế tiếp)
Tiếp đó bấm chỗ số 2 (auto fit lại dòng)
Cuối cùng Ctrl + P và Enter
.... (Bản ghi tiếp theo tương tự)...

Hiện mỗi file có vài trăm bản ghi, nên in từng cái mất rất nhiều thời gian,
Nhờ các bro giúp đỡ với ạ

Thanks cả nhà
 

File đính kèm

em ý kiến là tạo thêm 1 nút in rồi dùng auto click :)
 
Xin chào các members và anh/chị/em của diễn đàn ạ

Hiện em đang gặp khó khăn trong việc in ấn dữ liệu từ 1 file excel.
Mong các bro giúp đỡ.
Em cần in dữ liệu từ đầu đến cuối của file dữ liệu như đính kèm
-Mỗi lần in em bấm:
Chỗ số 1: (chọn bản ghi kế tiếp)
Tiếp đó bấm chỗ số 2 (auto fit lại dòng)
Cuối cùng Ctrl + P và Enter
.... (Bản ghi tiếp theo tương tự)...

Hiện mỗi file có vài trăm bản ghi, nên in từng cái mất rất nhiều thời gian,
Nhờ các bro giúp đỡ với ạ

Thanks cả nhà
Tô màu những Cell bạn gán hàm để người ta nhìn và viết code, chứ đâu ai rảnh dò từng chỗ cho bạn
 
Tô màu những Cell bạn gán hàm để người ta nhìn và viết code, chứ đâu ai rảnh dò từng chỗ cho bạn
hi, thanks bạn Be_09 đã góp ý,

Tại file mình làm khá ngoằn ngoèo, nên chung quy lại thì mình cũng xin giải thích ngắn gọn cái mình cần thôi ạ:
=>Mình có 1 cái List box (Sheet "HosoHC") như hình, mình muốn in toàn bộ danh sách dữ liệu của List Box Như này (list box là dữ liệu từ Sheet "DS_TRAM_PXK", và List này link số thứ tự đến ô J24. Mỗi lần trước khi in thì mình phải bấm cái 'Click Auto' để Autofit dòng trước khi in. Sau đó cứ Ctrl + P Enter in ấy ạ
Nhờ các cao nhân giúp đỡ ạ.

(Mình đính kèm lại file dễ nhìn hơn nha)
 

File đính kèm

Lần chỉnh sửa cuối:
Tại sao bạn cho là không sử dụng được mail merge? Hãy chỉ ra cụ thể. Hãy làm mail merge rồi mô tả, tại sao kết quả mail merge không làm bạn hài lòng.
 
Tại sao bạn cho là không sử dụng được mail merge? Hãy chỉ ra cụ thể. Hãy làm mail merge rồi mô tả, tại sao kết quả mail merge không làm bạn hài lòng.
Hi bro,
Vì kích thước những trang của mỗi bản ghi nó khác nhau (Ví dụ Bản ghi 1 có 14 dòng Vật tư, Bản ghi 2 có 9 dòng vật tư, rồi Bản ghi 3 có 19 dòng vật tư...), có cái dài có cái ngắn, không có 1 kích cỡ cố định, nên mình không sử dụng mail merge ấy!
Cụ thể các Bản ghi nằm này khác nhau về kích thước ở 2 phần trong sheet 'HosoHC':
- Phần 1: Row34->Row201
- Phần 2: Row293->Row313
Bạn có ý tưởng gì giúp mình không ạ
Thanks bạn
 
Hi bro,
Vì kích thước những trang của mỗi bản ghi nó khác nhau (Ví dụ Bản ghi 1 có 14 dòng Vật tư, Bản ghi 2 có 9 dòng vật tư, rồi Bản ghi 3 có 19 dòng vật tư...), có cái dài có cái ngắn, không có 1 kích cỡ cố định, nên mình không sử dụng mail merge ấy!
Cụ thể các Bản ghi nằm này khác nhau về kích thước ở 2 phần trong sheet 'HosoHC':
- Phần 1: Row34->Row201
- Phần 2: Row293->Row313
Bạn có ý tưởng gì giúp mình không ạ
Thanks bạn
Nghiên cứu VBA bạn nhé.
 
Bạn có ý tưởng gì giúp mình không ạ
Cách sửa ít nhất là 3 thao tác bằng tay thay bằng code. Ở bước 1 hiện thời khi chọn trong ListBox thì ô I24 sẽ thay đổi. Bây giờ dùng code thì ListBox là không cần thiết. Code tự thay đổi I24.

Chuyển Sub Autofit_And_DeleteCleanColumn từ module HosoHC sang Module1 -> dán code sau vào Module1 -> chạy sub test.

Mã:
Sub test()
Dim lastRow As Long, k As Long, tram()
    With ThisWorkbook.Worksheets("DS_TRAM_PXK")
        lastRow = .Cells(Rows.Count, "C").End(xlUp).Row
        If lastRow = 1 Then Exit Sub
        tram = .Range("C2:C" & lastRow + 1).Value   ' lay du 1 dong cuoi
    End With
    With ThisWorkbook.Worksheets("HosoHC")
        For k = 1 To UBound(tram, 1) - 1    ' khong xet dong lay du o cuoi
            .Range("I24").Value = tram(k, 1)    ' thay doi HosoHC!I24
            Autofit_And_DeleteCleanColumn
            .PrintOut
        Next k
    End With
End Sub
Bài đã được tự động gộp:


Hoặc vẫn giữ công thức ở I24 và thay đổi J24

Mã:
Sub test()
Dim lastRow As Long, k As Long
    With ThisWorkbook.Worksheets("DS_TRAM_PXK")
        lastRow = .Cells(Rows.Count, "C").End(xlUp).Row
        If lastRow = 1 Then Exit Sub
    End With
    With ThisWorkbook.Worksheets("HosoHC")
        For k = 1 To lastRow - 1
            .Range("J24").Value = k    ' thay doi HosoHC!J24
            Autofit_And_DeleteCleanColumn
            .PrintOut
        Next k
    End With
End Sub
 
Lần chỉnh sửa cuối:
Cách sửa ít nhất là 3 thao tác bằng tay thay bằng code. Ở bước 1 hiện thời khi chọn trong ListBox thì ô I24 sẽ thay đổi. Bây giờ dùng code thì ListBox là không cần thiết. Code tự thay đổi I24.

Chuyển Sub Autofit_And_DeleteCleanColumn từ module HosoHC sang Module1 -> dán code sau vào Module1 -> chạy sub test.

Mã:
Sub test()
Dim lastRow As Long, k As Long, tram()
    With ThisWorkbook.Worksheets("DS_TRAM_PXK")
        lastRow = .Cells(Rows.Count, "C").End(xlUp).Row
        If lastRow = 1 Then Exit Sub
        tram = .Range("C2:C" & lastRow + 1).Value   ' lay du 1 dong cuoi
    End With
    With ThisWorkbook.Worksheets("HosoHC")
        For k = 1 To UBound(tram, 1) - 1    ' khong xet dong lay du o cuoi
            .Range("I24").Value = tram(k, 1)    ' thay doi HosoHC!I24
            Autofit_And_DeleteCleanColumn
            .PrintOut
        Next k
    End With
End Sub
Bài đã được tự động gộp:


Hoặc vẫn giữ công thức ở I24 và thay đổi J24

Mã:
Sub test()
Dim lastRow As Long, k As Long
    With ThisWorkbook.Worksheets("DS_TRAM_PXK")
        lastRow = .Cells(Rows.Count, "C").End(xlUp).Row
        If lastRow = 1 Then Exit Sub
    End With
    With ThisWorkbook.Worksheets("HosoHC")
        For k = 1 To lastRow - 1
            .Range("J24").Value = k    ' thay doi HosoHC!J24
            Autofit_And_DeleteCleanColumn
            .PrintOut
        Next k
    End With
End Sub
cám ơn bác batman1 ạ, hiện mình đang dùng được rồi và cực kì tiện luôn, thanks bác so much
 
Web KT

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

Back
Top Bottom