Giới hạn số trang in tiêu đề trong Excel

Liên hệ QC

duong22000

Thành viên thường trực
Tham gia
8/5/13
Bài viết
322
Được thích
23
Em có 1 file Excel, trong đó sheets("DSHS") có dữ liệu ở 3 trang bảng tính:
Danh sách của em ở trang 1 và 2
Thống kê ở trang 3
Em đã chọn phần Print Titles để chọn in tiêu đề trên nhưng nó xuất hiện ở tắt cả các trang in.
Mọi người hướng dẫn em phần giới hạn các trang cho phần in có chung tiêu đề trên
VD: Ở file trên của em: Tiêu đề trên chỉ có ở trang 1 và 2; sang trang 3 thì không còn tiêu đề trên nữa.
Em có gửi file, mong mọi người hướng dẫn em với ạ. Em xin cảm ơn !
 

File đính kèm

  • DSHS.xls
    30 KB · Đọc: 5
1/ Cần nắm tính chất, bản chất:
- Trên một bảng tính chỉ có thể thiết lập 1 và chỉ 1 vùng in (không thể tồn tại đồng thời 2 vùng in riêng biệt trên 1 sheet);
- Print Titles áp dụng cho cả vùng in đã được thiết lập trên bảng tính đó.
=> Vụ giới hạn ở trên yêu cầu thì Excel bó tay.

2/ Cách:
Cách 1:
- In xong trang 1 và 2 thì hủy Print Titles. Tiếp đó, chọn vùng còn lại chưa in rồi thực hiện in.

Cách 2:
- In bình thường cả 3 trang rồi vác kéo/ dao cắt xẹt khúc đầu ở tờ trang 3 đi.

Cách 3: Dùng VBA để thực hiện cách 1.
 
1/ Cần nắm tính chất, bản chất:
- Trên một bảng tính chỉ có thể thiết lập 1 và chỉ 1 vùng in (không thể tồn tại đồng thời 2 vùng in riêng biệt trên 1 sheet);
- Print Titles áp dụng cho cả vùng in đã được thiết lập trên bảng tính đó.
=> Vụ giới hạn ở trên yêu cầu thì Excel bó tay.

2/ Cách:
Cách 1:
- In xong trang 1 và 2 thì hủy Print Titles. Tiếp đó, chọn vùng còn lại chưa in rồi thực hiện in.

Cách 2:
- In bình thường cả 3 trang rồi vác kéo/ dao cắt xẹt khúc đầu ở tờ trang 3 đi.

Cách 3: Dùng VBA để thực hiện cách 1.
Cảm ơn bác befaint đã quan tâm, em đành phải làm thủ công để in thôi...
 
Xin phép các bác em quay lại chủ đề này.
Về việc tuỳ chọn in Print Titles giữa các trang trong cùng 1 sheet thì em cũng đ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à - nguồn
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 In_chon_PrintTitles()
    Dim mPages As Long, i As Integer, mRange As Range
    Dim arrPages() As String
    Dim strPages As String
    Dim intPage As Integer
    Dim pr As Variant
    Dim sbi As Integer

    On Error Resume Next
    mPages = ActiveSheet.PageSetup.Pages.Count
    Set mRange = Application.InputBox("Ch" & ChrW(7885) & "n hàng làm Print Title", "BuilderTV - hoangtuan.net", , , , , , Type:=8)
    If mRange Is Nothing Then Exit Sub
    strPages = InputBox("Các trang không in 'Print Titles'. Vd: 2,5,7...", "BuilderTV - hoangtuan.net")
    If strPages = "" Then Exit Sub

    arrPages = Split(strPages, ",")
    pr = Application.Dialogs(xlDialogPrinterSetup).Show
    If pr = False Then Exit Sub

    sbi = InputBox("So ban in/ Copies:", "BuilderTV - hoangtuan.net", 1)
    'If sbi = "" Then Exit Sub

'msgBox Join(arrPages, ","), vbInformation, "Thông báo"

    ActiveSheet.PageSetup.PrintTitleRows = mRange.AddressLocal
    On Error Resume Next
    Application.ScreenUpdating = False
    If mPages > 0 Then
        With ActiveSheet.PageSetup
            For i = 1 To mPages
                If IsInArray(CStr(i), arrPages) Then
                   .PrintTitleRows = ""
                Else
                    .PrintTitleRows = mRange.AddressLocal
                End If
                'ActiveSheet.PrintOut ActivePrinter:=pr, Copies:=CInt(sbi), from:=i, To:=i
                ActiveSheet.PrintOut from:=i, To:=i
            Next i
        End With
    End If
    Application.ScreenUpdating = True
End Sub

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
    IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function
File đính kèm:
 

File đính kèm

  • Test in.xlsm
    154.7 KB · Đọc: 11
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ới bố cục kiểu này thì theo cảm giác của tớ thì không thể in hàng loạt được.
Tớ cũng từng in cái này, nhưng phải thủ công từng hạng mục thôi, có gọi cho mấy đồng chí G8 bảo cập nhật cách in từng hạng mục đi, mà mấy đồng chí ấy bảo không làm được.
Lập trình ra cả bộ G8 mà còn tịt thì khả năng không hàng loạt được đâu.
 
1/ Cần nắm tính chất, bản chất:
- Trên một bảng tính chỉ có thể thiết lập 1 và chỉ 1 vùng in (không thể tồn tại đồng thời 2 vùng in riêng biệt trên 1 sheet);
- Print Titles áp dụng cho cả vùng in đã được thiết lập trên bảng tính đó.
=> Vụ giới hạn ở trên yêu cầu thì Excel bó tay.

2/ Cách:
Cách 1:
- In xong trang 1 và 2 thì hủy Print Titles. Tiếp đó, chọn vùng còn lại chưa in rồi thực hiện in.

Cách 2:
- In bình thường cả 3 trang rồi vác kéo/ dao cắt xẹt khúc đầu ở tờ trang 3 đi.

Cách 3: Dùng VBA để thực hiện cách 1.
Cách 4: Copy hẵn cái tiêu đề dán vào trang 2, khỏi Print Title.
 
Với bố cục kiểu này thì theo cảm giác của tớ thì không thể in hàng loạt được.
Tớ cũng từng in cái này, nhưng phải thủ công từng hạng mục thôi, có gọi cho mấy đồng chí G8 bảo cập nhật cách in từng hạng mục đi, mà mấy đồng chí ấy bảo không làm được.
Lập trình ra cả bộ G8 mà còn tịt thì khả năng không hàng loạt được đâu.
Em đã xử lý được rồi bác ạ!
 
Có thể chia sẻ được được không nhỉ?
Dạ vẫn dùng marco như file em gửi phía trên. Em có sửa phần convert tất cả sang ngắt trang thủ công - để cố định số trang in. Sửa tiếp phần hàm tìm 1 số xem có nằm trong chuỗi không. Em có đóng gói lại file addin bác có thể tham khảo tại đây ạ!
 
Web KT
Back
Top Bottom