Стив ищет способ определить в макросе VBA количество страниц, которые будет иметь рабочий лист при печати, и номер страницы, на которой будет печататься конкретная ячейка. Эта задача не так проста, как можно было бы надеяться, но ее можно выполнить.

Кажется, что лучший способ справиться с этим — использовать устаревшую (но все еще доступную) функцию Excel 4 для определения общего количества напечатанных страниц на листе. Затем вы можете использовать коллекции HPageBreaks и VPageBreaks, чтобы выяснить, где находится ячейка в матрице страниц, которые будут напечатаны. Ниже приведен пример макроса, который использует эти элементы:

Sub PageInfo()

Dim iPages As Integer     Dim iCol As Integer     Dim iCols As Integer     Dim lRows As Long     Dim lRow As Long     Dim x As Long     Dim y As Long     Dim iPage As Integer

iPages = ExecuteExcel4Macro("Get.Document(50)")



With ActiveSheet         y = ActiveCell.Column         iCols = .VPageBreaks.Count         x = 0         Do             x = x + 1         Loop Until x = iCols _           Or y < .VPageBreaks(x).Location.Column         iCol = x         If y >= .VPageBreaks(x).Location.Column Then             iCol = iCol + 1         End If

y = ActiveCell.Row         lRows = .HPageBreaks.Count         x = 0         Do             x = x + 1         Loop Until x = lRows _           Or y < .HPageBreaks(x).Location.Row         lRow = x         If y >= .HPageBreaks(x).Location.Row Then             lRow = lRow + 1         End If

If .PageSetup.Order = xlDownThenOver Then             iPage = (iCol - 1)  (lRows + 1) + lRow         Else             iPage = (lRow - 1)  (iCols + 1) + iCol         End If     End With     MsgBox "Cell " & ActiveCell.Address & _       " is on " & vbCrLf & "Page " & _       iPage & " of " & iPages & " pages"

End Sub

При использовании этого макроса следует помнить о том, что коллекции HPageBreaks и VPageBreaks считаются точными только в том случае, если вы просматриваете лист в режиме предварительного просмотра разрыва страницы (Просмотр | Предварительный просмотр разрыва страницы). Таким образом, вы захотите убедиться, что находитесь в этом режиме, прежде чем выбирать ячейку и запускать макрос.

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

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

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

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

Этот совет (3135) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и более поздних версий) здесь:

link: / excelribbon-Page_Numbers_in_VBA [номера страниц в VBA].