Cần giúp đỡ về VBA tuỳ chọn in 'Print Titles' theo từng trang.

HoàngTuấn

Yêu THVBA
Về việc tuỳ chọn in Print Titles cho các trang trong cùng 1 sheet thì em đang gặp khó khăn với vấn đề này.
1. Nếu chỉ bỏ Print Titles tại trang cuối thì là dùng mã vba, có thể xử lý được, các bước là
- Chọn hàng đặt Print Titles
- Tìm tổng số trang trong sheet 'tst'
- Set từ trang 1 đến (tst -1) là có tiêu đề và in
- Set trang 'tst' tiêu đề = "" và in (trang cuối)
Đoạn mã code đó là:
Bash:
Sub Print_Titles_with_Row_Selection()

Dim mPages As Long, I As Integer, mRange As Range

On Error Resume Next

mPages = ActiveSheet.PageSetup.Pages.Count

Set mRange = Application.InputBox("Select Title Rows to Repeat:", "Print Titles Except Last Page", , , , , , Type:=8)

If mRange Is Nothing Then Exit Sub

On Error Resume Next

If mPages > 0 Then

With ActiveSheet.PageSetup

.PrintTitleRows = mRange.AddressLocal

ActiveSheet.PrintOut from:=1, To:=mPages - 1

.PrintTitleRows = ""

ActiveSheet.PrintOut from:=mPages, To:=mPages

End With

End If

End Sub
2. Bài toán khó khăn hơn em đang gặp phải dựa vào cách tương tự trên nhưng cho tuỳ chọn một số trang trong sheet không in Print Titles.
Ví dụ có 48 trang thì chọn các trang 3,6,9,12,15,18,22,25,43 là không in Print Titles
Em có mày mò ra được đoạn mã này thì mới một số trang ngắn thì mã chạy ổn, nhưng với số lượng trang lớn thì lại bị sai.
Ví dụ file em đính kèm sau đây thì các trang không in tiêu đề mong muốn là: 3,6,9,12,15,18,22,25,42. Nhưng khi chạy lệnh thì bị sai như trang 2, 4, 5 cũng không in ra tiêu đề. Có thể là khi set tiêu đề cho toàn bộ trang thì tổng số trang là 48 và khi set tiêu đề ="" thì tổng số trang lại giảm đi.
Vậy em xin góp ý của các bác để xử lý vấn đề này ạ!
Em cảm ơn các bác!
Mã code trong file đính kèm:

Bash:
Sub Print_Titles_with_Row_Selection()

Dim mPages As Long, I As Integer, mRange As Range

On Error Resume Next

mPages = ActiveSheet.PageSetup.Pages.Count

Set mRange = Application.InputBox("Select Title Rows to Repeat:", "Print Titles Except Last Page", , , , , , Type:=8)

If mRange Is Nothing Then Exit Sub

On Error Resume Next

If mPages > 0 Then

With ActiveSheet.PageSetup

.PrintTitleRows = mRange.AddressLocal

ActiveSheet.PrintOut from:=1, To:=mPages - 1

.PrintTitleRows = ""

ActiveSheet.PrintOut from:=mPages, To:=mPages

End With

End If

End Sub
File đính kèm:
 

HoàngTuấn

Yêu THVBA
Hi các bác. Em đã tìm được cách fix vấn đề trên. Vậy bác mod nào đi qua đây thì đóng chủ đề giúp em.
Em cảm ơn nhiều ạ!
 
Top