Michelle có một trang tính dài mà cô ấy đang làm việc. Khi cô ấy sử dụng Print Preview cho trang tính, trang được hiển thị trong hộp thoại Print Preview luôn là trang đầu tiên. Michelle tự hỏi liệu có cách nào để bản Print Preview tự động hiển thị trang của trang tính mà cô ấy đang làm việc trên đó không.

Một cách để tiếp cận vấn đề này là thử làm việc với các vùng in. Nếu bạn chọn vùng của trang tính mà bạn đang làm việc và sau đó đặt vùng in bằng với lựa chọn của bạn, thì khi hiển thị Xem trước khi in, bạn sẽ chỉ thấy vùng in đó.

Nếu điều này không đạt được mong muốn của bạn, thì bạn có thể nghĩ rằng bạn có thể sử dụng macro. Đây là một macro ví dụ có thể thực hiện thủ thuật cho bạn:

Sub PrintPreviewActivePage()

Dim lActiveRow As Long     Dim iActiveCol As Integer     Dim iHPBs As Integer     Dim iVPBs As Integer     Dim lRow As Integer     Dim iCol As Integer     Dim iPage As Integer

lActiveRow = ActiveCell.Row     iActiveCol = ActiveCell.Column     ActiveSheet.UsedRange

If IsEmpty(ActiveCell.SpecialCells(xlCellTypeLastCell)) Then _       ActiveCell.SpecialCells(xlCellTypeLastCell).FormulaR1C1 = " "

If lActiveRow > ActiveCell.SpecialCells(xlCellTypeLastCell).Row Or _       iActiveCol > ActiveCell.SpecialCells(xlCellTypeLastCell).Column Then _       Exit Sub

With ActiveSheet         iHPBs = .HPageBreaks.Count         iVPBs = .VPageBreaks.Count         lRow = 0         iCol = 0         If iHPBs > 0 Or iVPBs > 0 Then             For lRow = iHPBs To 1 Step -1                 If .HPageBreaks(lRow).Location.Row <= lActiveRow Then Exit For             Next lRow             For iCol = iVPBs To 1 Step -1                 If .VPageBreaks(iCol).Location.Column <= iActiveCol Then Exit For             Next iCol         End If         iPage = (lRow + 1) + (iCol * (iHPBs + 1))

.PrintOut From:=iPage, To:=iPage, Preview:=True         MsgBox "Previewed page " & iPage     End With     If ActiveCell.SpecialCells(xlCellTypeLastCell).FormulaR1C1 = " " Then _       Selection.SpecialCells(xlCellTypeLastCell).ClearContents End Sub

Macro này thực sự là một biến thể trên bất kỳ số lượng macro nào mà bạn có thể tìm thấy với một số cuộc điều tra trên Internet. Có hai phần quan trọng đối với nó — đầu tiên macro chỉ ra bạn đang ở “trang” nào trong trang tính, sau đó nó sử dụng phương thức .PrintOut với tham số Preview được đặt thành True, dẫn đến Print Preview được gọi.

Một số trang tính macro này có thể hoạt động tốt, nhưng nó khá thay đổi trong việc nó có hoạt động hay không. Trong hầu hết các thử nghiệm của tôi, tôi không thể làm cho nó hoạt động, trừ khi tôi sử dụng các trang tính rất nhỏ. (Nói cách khác, rất ít hàng và cột.) Nếu bạn chạy nó trên một trang tính lớn, bạn sẽ nhanh chóng thấy rằng bạn gặp lỗi “Chỉ số nằm ngoài phạm vi” trong vòng lặp kiểm tra các thành viên của bộ sưu tập .HPageBreaks. Điều này có thể xảy ra như thế nào khi bạn không sử dụng thành viên nằm ngoài phạm vi (lRow không bao giờ thay đổi bên ngoài giá trị được trả về bởi thuộc tính .Count) gây khó khăn.

Tuy nhiên, nó có vẻ là một vấn đề mà Microsoft thừa nhận. Trên thực tế, đó là một vấn đề mà họ đã thừa nhận, nhưng chưa bao giờ sửa chữa, trong nhiều năm:

https://support.microsoft.com/en-us/help/210663/

Tuy nhiên, giải pháp được đề xuất trên trang web không thực sự hoạt động. Vì vậy, chúng tôi bị mắc kẹt với một macro chỉ hoạt động đáng tin cậy trên các trang tính mà bạn không cần tính số trang vì bạn chỉ làm việc với một trang duy nhất. Aargh!

Điểm mấu chốt là cách tiếp cận dựa trên vĩ mô có thể — trong tương lai gần — không khả thi đối với nhu cầu của Michelle. Điều đó khiến chúng tôi chỉ với cách tiếp cận vùng in, được mô tả ở phần đầu của mẹo này.

_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 (13578) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365.