Номера страниц в VBA (Microsoft Excel)
Стив ищет способ определить в макросе 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]
.