David đang điều hành một cuộc bầu cử cho một xã hội nghề nghiệp và danh sách các cử tri đủ điều kiện là một bảng tính. Có khoảng 1.200 cử tri đủ điều kiện, vì vậy bản in dài hơn hai mươi trang. David có một phần chân trang với số trang — điều này rất hữu ích — nhưng sẽ thật tuyệt nếu cậu ấy có thể có tên đầu trang và họ trên trang trong đầu trang của mỗi trang.

Trong Excel không có cách nào để làm điều này. Tuy nhiên, đây là một việc tương đối dễ thực hiện trong Word, vì vậy một giải pháp là dán các tên đã sắp xếp vào tài liệu Word và sau đó thêm tiêu đề mong muốn hiển thị tên.

Mặc dù điều này có thể hoạt động, nhưng sẽ trở nên khó khăn khi đảm bảo rằng phiên bản Word của danh sách luôn đồng bộ với phiên bản Excel của danh sách và ngược lại.

Nếu bạn quyết định muốn giữ một phiên bản duy nhất của danh sách cử tri trong Excel, thì cách tốt nhất để giải quyết vấn đề là sử dụng macro để chèn họ và tên vào tiêu đề. Mã của macro như vậy, rõ ràng, sẽ cần được điều chỉnh cho phù hợp với bố cục của dữ liệu trong trang tính của bạn. Macro sau đây giả định rằng các tên nằm trong cột A đến C, với họ (những người bạn muốn sử dụng cho tiêu đề) nằm trong cột C.

Sub PrintNamesInHeader()

Dim iPages As Integer     Dim iPage As Integer     Dim iHorPgs As Integer     Dim iHP As Integer     Dim iHPNext As Integer     Dim iCol As Integer     Dim iColLast As Integer     Dim lRow As Long     Dim lRowLast As Long     Dim sPrtArea As String

iCol = 1        'Col A     iColLast = 3    'Col C     With ActiveSheet         iPages = ExecuteExcel4Macro("Get.Document(50)")

iHorPgs = .HPageBreaks.Count + 1         sPrtArea = .PageSetup.PrintArea

For iPage = 1 To iPages             iHP = ((iPage - 1) Mod iHorPgs)

iHPNext = iHP + 1             If iHP = 0 Then                 If sPrtArea = "" Then                     lRow = 1                 Else                     lRow = .Range(sPrtArea).Cells(1).Row                 End If             Else                 lRow = .HPageBreaks(iHP).Location.Row             End If             If iHPNext > .HPageBreaks.Count Then                 lRowLast = .Cells(lRow, iColLast).End(xlDown).Row             Else                 lRowLast = .HPageBreaks(iHPNext).Location.Row - 1             End If             .PageSetup.LeftHeader = .Cells(lRow, iCol).Value & _               " - " & .Cells(lRowLast, iColLast)

.PrintOut From:=iPage, To:=iPage, preview:=True         Next     End With End Sub

Khi bạn chạy macro, macro sẽ chuyển qua từng trang của trang tính. Các tiêu đề được đặt cho trang, sau đó trang đơn được in, sau đó trang tiếp theo được kiểm tra và xử lý.

_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 (9542) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: