У Мишель есть длинный рабочий лист, с которым она работает. Когда она использует предварительный просмотр для рабочего листа, страница, отображаемая в диалоговом окне предварительного просмотра, всегда является первой страницей. Мишель задается вопросом, есть ли способ сделать так, чтобы предварительный просмотр печати автоматически отображал страницу рабочего листа, над которым она работает.

Один из способов решения этой проблемы — попробовать работать с областями печати. Если вы выберете область рабочего листа, над которой работаете, а затем установите область печати, равную вашему выбору, то при отображении предварительного просмотра печати вы должны увидеть только эту область печати.

Если это не соответствует вашему желанию, вы можете подумать, что можете прибегнуть к использованию макроса. Вот пример макроса, который может помочь вам:

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

Этот макрос на самом деле является вариацией любого количества макросов, которые вы можете найти в Интернете. Он состоит из двух ключевых частей: сначала макрос определяет, на какой «странице» вы находитесь на листе, а затем он использует метод .PrintOut с параметром Preview, установленным в True, что приводит к вызову Print Preview.

На некоторых рабочих листах этот макрос может отлично работать, но довольно непостоянно, будет он работать или нет. В большинстве случаев мне не удавалось заставить его работать, если только я не использовал очень маленькие рабочие листы. (Другими словами, очень мало строк и столбцов.) Если вы запустите его на большом листе, вы быстро увидите, что в цикле, проверяющем элементы коллекции .HPageBreaks, вы получите ошибку «Индекс вне диапазона». Как это могло произойти, если вы не используете член, который находится вне диапазона (lRow никогда не выходит за пределы значения, возвращаемого свойством .Count), вызывает недоумение.

Однако, похоже, это проблема, которую Microsoft признает. Фактически, это проблема, которую они признали, но никогда не исправляли в течение многих лет:

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

Однако предлагаемое решение на веб-странице на самом деле не работает. Итак, мы застряли с макросом, который надежно работает только на листах, где вам не нужно вычислять номер страницы, потому что вы работаете только с одной страницей. Ах!

Суть в том, что в обозримом будущем подход, основанный на макросах, может оказаться непригодным для нужд Мишель. Остается только подход области печати, описанный в начале этого совета.

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (13578) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365.