Khi làm việc với các trang tính lớn, không có gì lạ khi thêm tổng phụ để bạn có thể nhóm thông tin trong trang tính theo một số cách hợp lý. (Công cụ Tổng phụ nằm trên tab Dữ liệu của ruy-băng trong nhóm Dàn bài.) Khi thêm tổng phụ, bạn có thể chỉ định rằng Excel bắt đầu mỗi nhóm trên một trang hoàn toàn mới. Điều này rất tiện dụng cho tất cả các loại báo cáo trong Excel.

Nếu bạn bắt đầu từng nhóm hoặc phần tổng phụ trên một trang mới, bạn có thể tự hỏi liệu có cách nào để tạo tiêu đề tùy chỉnh in khác nhau cho từng phần, tương tự như những gì bạn có thể làm với các phần khác nhau trong tài liệu Word. Thật không may, không có cách nào để làm điều này trong Excel. Tuy nhiên, bạn có thể tạo một macro thay đổi lặp lại tiêu đề và in từng nhóm của một trang tính. Hãy xem xét macro sau:

Sub ChangeSectionHeads()

Dim c As Range, rngSection As Range     Dim cFirst As Range, cLast As Range     Dim rowLast As Long, colLast As Integer     Dim r As Long, iSection As Integer     Dim iCopies As Variant     Dim strCH As String

Set c = Range("A1").SpecialCells(xlCellTypeLastCell)

rowLast = c.Row     colLast = c.Column

iCopies = InputBox( _         "Number of Copies", "Changing Section Headers", 1)



If iCopies = "" Then Exit Sub

Set cFirst = Range("A1")     ' initialization start cell     For r = 2 To rowLast    ' from first row to last row         If ActiveSheet.Rows(r).PageBreak = xlPageBreakManual Then             Set cLast = Cells(r - 1, colLast)

Set rngSection = Range(cFirst, cLast)



iSection = iSection + 1             Select Case iSection             '   substitute your CenterSection Header data ...

Case 1: strCH = "Section 1"

Case 2: strCH = "Section 2"

'   etc             '   Case n: strCH = "Section n"

End Select

ActiveSheet.PageSetup.CenterHeader = strCH

rngSection.PrintOut _                 Copies:=iCopies, Collate:=True

Set cFirst = Cells(r, 1)

End If     Next r

'   Last Section +++++++++++++++++++++++++++



Set rngSection = Range(cFirst, c)



iSection = iSection + 1 '   substitute your Center Header data ...

strCH = "Last Section ..."



ActiveSheet.PageSetup.CenterHeader = strCH

rngSection.PrintOut _         Copies:=iCopies, Collate:=True End Sub

Macro này là một khởi đầu tốt để hoàn thành những gì bạn muốn làm. Nó bắt đầu bằng cách hỏi bạn muốn in bao nhiêu bản sao của mỗi phần, và sau đó nó bắt đầu xem qua từng hàng để xem có ngắt trang trước hàng đó hay không.

Việc kiểm tra hàng thực tế được thực hiện bằng cách xem thuộc tính PageBreak của mỗi hàng. Thuộc tính này thường được đặt thành xlPageBreakNone, nhưng khi bạn sử dụng tính năng Tổng phụ của Excel, bất kỳ hàng nào có dấu ngắt trang trước khi hàng đó có thuộc tính này được đặt thành xlPageBreakManual. Đây là cài đặt tương tự sẽ xảy ra nếu bạn đặt ngắt trang theo cách thủ công trong trang tính của mình.

Nếu macro phát hiện một hàng có ngắt trang trước nó, thì phạm vi rngSection được đặt bằng các hàng trong nhóm trước đó. Ngoài ra, cấu trúc Chọn trường hợp được sử dụng để đặt các tiêu đề khác nhau được sử dụng cho các phần khác nhau của trang tính. Tiêu đề này sau đó được đặt ở vị trí trung tâm của tiêu đề và phạm vi được chỉ định bởi rngSection được in.

Sau khi xem qua tất cả các nhóm trong trang tính, nhóm cuối cùng (không kết thúc bằng ngắt trang) được in.

Để sử dụng macro này, tất cả những gì bạn cần làm là chỉ định trong cấu trúc Chọn trường hợp các tiêu đề khác nhau mà bạn muốn cho mỗi phần của trang tính. Nếu muốn, bạn cũng có thể thay đổi vị trí đặt tiêu đề trong tiêu đề. Tất cả những gì bạn cần làm là thay đổi thuộc tính CenterHeader thành LeftHeader hoặc RightHeader. Bạn cũng có thể sử dụng LeftFooter, CenterFooter và RightFooter, nếu muốn.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (9867) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365.