Sla_0412 Пользователь Сообщений: 206 |
В моем примере необходимо вставлять вертикальный разрыв страницы на следующих условиях: Изменено: Sla_0412 — 19.03.2020 19:01:14 |
Kuzmich Пользователь Сообщений: 7998 |
#2 29.04.2015 20:06:04
А я, так понимаю, что нужен горизонтальный разрыв |
||
Sla_0412 Пользователь Сообщений: 206 |
да, мне нужно только по горизонтали |
Kuzmich Пользователь Сообщений: 7998 |
#4 29.04.2015 20:08:54 И еще, сколько строк умещается на странице?
разрыв над ячейкой Изменено: Kuzmich — 05.05.2015 14:55:22 |
||
Sla_0412 Пользователь Сообщений: 206 |
Проблема состоит в том что при использовании ActiveSheet.HPageBreaks.Add ячейка, я смог только сдвинуть первый разрыв, который влияет на последующие разрывы ниже по строкам. те никак не соображу как зациклить обработку если информация всегда размещается вразнобой.(листов множество и комбинации текста и графики разные) |
Kuzmich Пользователь Сообщений: 7998 |
#6 29.04.2015 21:30:53 Попробуйте так
|
||
Sla_0412 Пользователь Сообщений: 206 |
Я может как то неправильно описал задачу, но во первых, файл выложен как пример и привязываться к его размерам высоты строк а так же к ориентации листа никак нельзя. Предполагается использовать метод для разных целей (отчеты разных документов) , на разных компьютерах, с разными принтерами. Во-вторых , он даже в том виде в котором есть, не отрабатывает свою задачу.(Это легко проверить скопировав текст примера вниз и продолжив ряд строк. |
RAN Пользователь Сообщений: 7091 |
#8 29.04.2015 23:01:43
И? |
||
Kuzmich Пользователь Сообщений: 7998 |
#9 29.04.2015 23:09:21 Попробуйте так
|
||
Sla_0412 Пользователь Сообщений: 206 |
Все работает, но нужно вставить между строкой 6 и 7 On Error Resume Next. |
temash Пользователь Сообщений: 13 |
Здравствуйте! У меня вопрос по этой теме. мне надо поставить разрыв перед словом «карточка» (т.е. каждая карточка должна начинаться с новой страницы при печати). |
Kuzmich Пользователь Сообщений: 7998 |
#12 02.06.2015 12:49:00 Попробуйте так Параметры страницы — Поля верхнее 1, нижнее — 1,5 колонтитулы — 0
|
||
temash Пользователь Сообщений: 13 |
Kuzmich, спасибо, работает!!! |
temash Пользователь Сообщений: 13 |
#14 02.06.2015 18:23:24 захотела сама подогнать макрос под другой файл… видно не дано….. посмотрите, что не так?
Прикрепленные файлы
|
||
RAN Пользователь Сообщений: 7091 |
#15 02.06.2015 19:44:22 Макрос попроще
|
||
Kuzmich Пользователь Сообщений: 7998 |
#16 02.06.2015 20:26:06
В 130 столбце нет данных, ищите последнюю строку по первому столбцу
|
||||
temash Пользователь Сообщений: 13 |
RAN, спасибо большое, работает ВЫ ГЕНИИ!!!!! |
eka0043 Пользователь Сообщений: 1 |
Ребята, помогите, плиз прописать макрос. У самой ничего не получается. В табличке, которая прикреплена, нужен разрыв страницы по первой колонке «ветка». И чтобы на одной страничке было только 23 строки. |
adventy Пользователь Сообщений: 24 |
#19 19.03.2020 17:48:19
Добрый день. |
||
Kuzmich Пользователь Сообщений: 7998 |
#20 20.03.2020 13:35:29
Изменено: Kuzmich — 20.03.2020 14:58:53 |
||||
adventy Пользователь Сообщений: 24 |
Спасибо Kuzmich , я это тоже искал! |
Vitalio Пользователь Сообщений: 8 |
#22 21.10.2020 13:34:43 Здравствуйте, уважаемые! Если можете, помогите, пожалуйста, с похожей задачей. Есть стандартная накладная в которой есть шапка накладной, тело (таблица с товарами), а так же подписи. Можно ли проверить находятся начало подписи и конец на одном листе и, если да, то проверить не оторвана ли подпись от основной таблицы? И в зависимости от сложности реализации или уменьшить на 1 выводимые на печать количество страниц или добавить разрыв перед последней строкой табличной части? Визуально можно посмотреть в прилагаемом файле. Прикрепленные файлы
Изменено: Vitalio — 21.10.2020 13:35:13 |
In this Article
- Page Break View Mode
- Insert Page Breaks
- Delete Page Break
- Move Page Breaks
- Reset Page Breaks
- Hide Page Breaks in Normal View
- Page Breaks – VBA
If you don’t manually set Page Breaks, Excel will do it’s best to set appropriate Page Breaks. However, if you’ve ever tried to print an Excel spreadsheet, you know it generally does not do a good job.
Any time you print a spreadsheet you should review and edit the Page Breaks before printing.
Page Break View Mode
Because page breaks are not shown by default in Excel, you will want to switch to Page Break Preview view mode in order to work effectively with them.
To switch from Normal View to Page Break Preview, activate the View Ribbon Menu. Then select Page Break Preview (ALT > W > I).
Below is an example of what the view looks like. A dashed line represents an automatic page break whereas solid lines stand for manual page breaks.
Tip: To go back to Normal View, go to View Ribbon > Normal (directly next to Page Break Preview) (ALT > W > L).
<!–Ads3–>
Insert Page Breaks
To insert a row (horizontal) page break, highlight the row directly below where you want to place the break. Then navigate to the Layout Ribbon Menu and select Breaks > Insert Page Break (ALT > P > B > I).
Result:
Tip: The SHIFT + SPACE shortcut allows you to conveniently select an entire row.
Follow the same steps to insert a column (vertical) Page Break. Select the column directly to the right of where you want to place your break. Then go to Page Layout > Breaks > Insert Page Break (ALT > P > B > I).
Tip: The CTRL + SPACE shortcut allows you to conveniently select an entire column.
Delete Page Break
To delete page breaks you can use almost exact same steps as if you were to insert one. Select the row below or column to the right of the page break and perform these steps:
Under the Page Layout Ribbon Menu, select Breaks then Remove Page Break (ALT > P > B > R)
Note: Automatic page breaks cannot be deleted
Move Page Breaks
If you happen to mess up where you placed your breaks, don’t fret. You can simply move them to the desired location.
Activate Page Break Preview (ALT > W > I), and simply hover over any page break lines until the <-> shows up then drag it to the desired location.
Warning: If you happen to move an automatic page break, it will turn into its manual counterpart.
<!–Ads1–>
Reset Page Breaks
Sometimes, you want to reset all of the Page Breaks in a worksheet..
On the ribbon, head back to where you would insert a page break and select the reset option (ALT > P > B > A)
Hide Page Breaks in Normal View
Page breaks may appear in Normal View Mode; they can be useful or an eye sore. To hide them, follow these steps:
Click the File tab on the ribbon then select Options on the left menu:
Then navigate to the Advanced subtab in the left menu. Scroll down to Display options for this worksheet and unselect Show Page Breaks.
<!–Ads2–>
Page Breaks – VBA
Everything mentioned above can also be accomplished using VBA using these code examples:
‘Add Row Page Break
Worksheets("Sheet1").Rows(40).PageBreak = xlPageBreakManual
‘Add Column Page Break
Worksheets("Sheet1").Columns("Z").PageBreak = xlPageBreakManual
‘Clear Row Page Break
Worksheets("Sheet1").Rows(40).PageBreak = xlPageBreakNone
‘Clear Column Page Break’
Worksheets("Sheet1").Columns("Z").PageBreak = xlPageBreakNone
‘Set Activesheet to Page Break Preview Mode
ActiveWindow.View = xlPageBreakPreview
‘Restore Activesheet to Normal View Mode
ActiveWindow.View = xlNormalView
Для вас может быть легко и просто вставить разрыв страницы в рабочий лист. Иногда требуется вставить разрывы страниц в каждые X строк для аккуратной печати, как бы вы могли это сделать? Здесь я представлю несколько методов решения этой проблемы в Excel.
- Вставить разрыв страницы каждые X строк с помощью VBA в Excel
- Пакетная вставка разрывов страниц после каждых x строк
- Пакетная вставка разрывает страницу после каждых x строк с добавлением заголовка строки над каждыми x строками
Вставить разрыв страницы каждые X строк с помощью VBA в Excel
Возможно, вы не знакомы с ранее запущенным VBA, но, выполнив следующие действия, вы сможете узнать, как запустить VBA для вставки разрыва страницы через каждые X строк. Здесь я буду вставлять разрыв страницы через каждые 3 строки.
1, нажмите Alt + F11 для отображения Microsoft Visual Basic для приложений окно.
2. В окне нажмите Вставить > Модули чтобы отобразить новое окно модуля, затем скопируйте следующий код VBA в окно модуля.
VBA: вставлять разрыв страницы в каждые X строк на листе.
Sub InsertPageBreaks()
'Updateby20140618
Dim xLastrow As Long
Dim xWs As Worksheet
Set xWs = Application.ActiveSheet
xRow = Application.InputBox("Row", xTitleId, "", Type:=1)
xWs.ResetAllPageBreaks
xLastrow = xWs.Range("A1").SpecialCells(xlCellTypeLastCell).Row
For i = xRow + 1 To xLastrow Step xRow
xWs.HPageBreaks.Add Before:=xWs.Cells(i, 1)
Next
End Sub
3. Нажмите Run и появляется диалоговое окно, в котором вы можете указать каждые X строк, в которые вы хотите вставить разрыв страницы. Здесь я вставляю разрыв страницы в каждые 3 строки. Смотрите скриншот:
4. Нажмите OK, а затем вставит разрыв страницы в каждые X строк.
Быстро вставлять разрыв страницы в каждую (n-ю) строку активного листа
Обычно мы вставляем один разрыв страницы при нажатии Макет страницы > Перерывы > Вставить разрыв страницы. Но таким образом слишком утомительно вставлять несколько разрывов страниц в лист, например, вам нужно вставлять один разрыв страницы в каждую строку для печати каждой строки на отдельной странице. Не волнуйся! Kutools for ExcelАвтора Вставить разрыв страницы в каждую строку утилита поможет вам легко его заархивировать!
Пакетная вставка разрывов страницы после каждых x строк с Kutools for Excel
Если у вас есть Kutools for Excel установлен, его Разделить на столбцы Утилита может помочь вам пакетно вставлять несколько разрывов страниц после каждых x строк, легко сохраняя заголовок на каждой странице в Excel.
1. Нажмите Разделить на столбцы на Кутулс Плюс меню.
2. В открывшемся диалоговом окне Разделить на столбцы вам необходимо:
(1) Нажмите кнопку «Обзор». в Диапазон названий и выберите строку заголовка в указанном диапазоне, в который вы будете вставлять разрывы страниц.
(2) Нажмите кнопку «Обзор». в Диапазон дат и выберите диапазон, в который вы будете выполнять пакетную вставку разрывов страниц.
(3) В Строк на печатной странице поле введите число. (Функции: Например, если вам нужно вставить разрывы страниц после каждых 3 строк, введите 3 в поле; если вам нужно инертить разрывы страниц после каждой строки, введите 1.)
(4) Введите 1 в Количество сегментов пунктом.
3, Нажмите Ok кнопку.
Теперь вы увидите, что диапазон копируется на новый лист, а разрывы страниц добавляются после каждых x строк с сохранением заголовка диапазона. Вы также можете переключиться в режим предварительного просмотра разрыва страницы, нажав Вид > Предварительный просмотр разрыва страницы чтобы увидеть эти разрывы страниц. См. Снимок экрана ниже.
Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now
Вставить разрывы страниц после каждых x строк с помощью Kutools for Excel
Kutools for Excel разрабатывает еще одну утилиту Insert Page Break Every Row, специализирующуюся на вставке разрывов страниц после каждых x строк.
1. Выберите диапазон, в который вы будете вставлять разрывы страниц после каждых x строк, и нажмите печать > Вставить разрыв страницы в каждую строку на Кутулс Плюс меню.
2. В открывшемся диалоговом окне «Вставить разрыв страницы в каждую строку» укажите интервал строк, в которые вы будете вставлять разрывы страниц, и щелкните значок Ok кнопку.
Тогда вы увидите, что разрывы страниц вставляются сразу с заданным интервалом строк.
Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now
Демонстрация: вставляйте разрыв страницы каждые x строк в Excel
Относительные статьи:
- Вставить или удалить разрыв страницы в Excel
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (3)
Оценок пока нет. Оцените первым!
Запись от Alex_Gur размещена 24.09.2015 в 15:15
Обновил(-а) Alex_Gur 28.01.2016 в 11:56
Если в Word страницы входят в коллекцию
Visual Basic | ||
|
и обращение к ним производится по типу:
Visual Basic | ||
|
то в Excel работа со страницами производится с помощью коллекций разрывов страниц соответственно по вертикали и по горизонтали
Visual Basic | ||
|
и
Visual Basic | ||
|
.
Приведенные далее макросы для работы со страницами в Excel нужно помещать в модули группы Modules.
Количество страниц по вертикали
Visual Basic | ||
|
Количество страниц по горизонтали
Visual Basic | ||
|
Проверка количества страниц по горизонтали (если оно не должно превышать 1)
Visual Basic | ||
|
Общее количество страниц на активном листе
Visual Basic | ||
|
или
Visual Basic | ||
|
Количество страниц на всех листах книги
Visual Basic | ||
|
Вставка пользователем разрыва страницы
Пользовательский разрыв страницы устанавливается над ячейкой, указанной в качестве параметра Before.
Visual Basic | ||
|
Вместо ячейки ActiveCell в данном коде можно указать ячейку с определенным произвольным адресом.
Внимание! После установки пользовательского разрыва страницы автоматические разрывы, устанавливаемые программой перед печатью, могут быть автоматически изменены.
Удаление пользовательского разрыва страницы с определенным номером
Все символы Разрыв страницы (как пользовательские, так и установленные программой автоматически для деления на страницы для печати) входят в коллекцию HPageBreaks и имеют в этой коллекции свой уникальный номер. Зная этот номер, можно легко удалить пользовательский разрыв страницы.
Visual Basic | ||
|
Удаление пользовательского разрыва страницы над указанной ячейкой
Удаление производится, если над указанной ячейкой действительно был установлен пользовательский разрыва страницы.
Visual Basic | ||
|
Вместо ячейки ActiveCell в данном коде можно указать ячейку с определенным произвольным адресом.
Печать только первой страницы
Visual Basic | ||
|
Всего комментариев
This is completely brilliant — thank you!
For those who might be interested in creating VERTICAL page breaks — eg for each year in a cash flow — I share my code as below:
Sub pagebreaks()
'insert the required page breaks automatically
' see https://stackoverflow.com/questions/51632995/inserting-page-break-with-vba
Dim ws As Worksheet
Dim overallendcol As Long
Dim mycol As Long
'set the working sheet
Set ws = Sheets("cf mthly")
'clear existing page breaks
ActiveWindow.View = xlNormalView
ActiveSheet.Cells.pagebreak = xlPageBreakNone
'establish the first new year column
Cells(1, 1).Select
Cells.Find(What:="Jan", After:=ActiveCell, LookIn:= _
xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate
newyearcol = ActiveCell.Column
'establish the overall last column
Cells(1, 1).Select
Cells.Find(What:="totals", After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate
overallendcol = ActiveCell.Column
'establish each new year column
Cells(1, 1).Select
For mycol = newyearcol To overallendcol - 1 Step 12
ws.Columns(newyearcol).pagebreak = xlPageBreakManual
Next mycol
End Sub
As part of an overhaul of a report generator I saw what I believed to be inefficient code. This part of the code runs after the main report is generated to set the page breaks in logical positions. The criteria is this:
- Each Site starts on a new page.
- Group’s aren’t allowed to broken across pages.
The code follows the above format: 2 loops doing those jobs.
This is the original code (sorry for the length):
Public Sub PageBreak(ByRef wstWorksheet As Excel.Worksheet, ByVal pctProgress As ProgressCtl.ProgressControl)
Dim breaksMoved As Integer
Dim p As HPageBreak
Dim i As Integer
'Used as a control value
breaksMoved = 1
' Marks that no rows/columns are to be repeated on each page
wstWorksheet.Activate
wstWorksheet.PageSetup.PrintTitleRows = ""
wstWorksheet.PageSetup.PrintTitleColumns = ""
'If this isn't performed beforehand, then the HPageBreaks object isn't available
Range("A3").Select
ActiveWindow.View = xlPageBreakPreview
'Defaults the print area to be the entire sheet
wstWorksheet.DisplayPageBreaks = False
wstWorksheet.PageSetup.PrintArea = ""
Range("$B$4").Select
' add breaks after each site
Do While ActiveCell.Row <= wstWorksheet.UsedRange.Rows.Count
If ActiveCell.FormulaR1C1 = "Site ID" Then
ActiveCell.PageBreak = xlPageBreakManual
End If
ActiveCell.Offset(1, 0).Activate
pctProgress.ProgressText = "Row " & CStr(ActiveCell.Row) & " of " & CStr(wstWorksheet.UsedRange.Rows.Count)
Loop
Dim passes As Long
Do While breaksMoved = 1
passes = passes + 1
breaksMoved = 0
For i = 1 To wstWorksheet.HPageBreaks.Count - 1
Set p = wstWorksheet.HPageBreaks.Item(i)
'Selects the first page break
Range(p.Location.Address).Select
'Sets the ActiveCell to 1 row above the page break
ActiveCell.Offset(-1, 0).Activate
'Move the intended break point up to the first blank section
Do While Not ActiveCell.FormulaR1C1 = ""
ActiveCell.Offset(-1, 0).Activate
breaksMoved = 1
Loop
'Add the page break
If ActiveCell.FormulaR1C1 <> "Site ID" Then
ActiveCell.Offset(1, 0).Activate
wstWorksheet.HPageBreaks.Add ActiveCell
End If
pctProgress.ProgressText = "Set break point " & CStr(passes) & "." & CStr(i)
Next
Loop
'Reset the view to normal
wstWorksheet.DisplayPageBreaks = True
ActiveWindow.View = xlNormalView
Range("A3").Select
End Sub
Seeing room for improvement I set about modifying this. As one of the new requirements the people wanting the report were manually removing pages prior to printing. So I added checkboxes on another page and copied the checked items across. To ease that I used named ranges. I used these named ranges to meet the first requirement:
' add breaks after each site
For Each RangeName In ActiveWorkbook.Names
If Mid(RangeName.Name, 1, 1) = "P" Then
Range(RangeName).Activate
ActiveCell.Offset(Range(RangeName).Rows.Count - 1, 0).Select
ActiveCell.PageBreak = xlPageBreakManual
End If
Next RangeName
All Ranges are prefixed with P_ (for parent). Using the lame Now() style of rough timing this is 1 second slower on my short 4 site report and the more challenging 15 site report. These have 606 and 1600 rows respectively.
1 second isn’t so bad. Lets look at the next criteria.
Each logical group is split by a blank row, so the easiest way is to find the next page break, step back until you find the next blank line and insert the new break. Rinse and repeat.
So why does the original run through multiple times? We can improve that too (the boiler plate outside the loops is the same).
Dim i As Long
Dim oPageBreak As HPageBreak
Do While i < shtDeliveryVariance.HPageBreaks.Count - 1
i = i + 1
pctProgress.ProgressText = "Setting Page Break " & CStr(i) & " of " & CStr(shtDeliveryVariance.HPageBreaks.Count)
Set oPageBreak = shtDeliveryVariance.HPageBreaks.Item(i)
' select the page break
Range(oPageBreak.Location.Address).Select
ActiveCell.Offset(-1, 0).Activate
' move up to a free row
Do While Not ActiveCell.FormulaR1C1 = ""
ActiveCell.Offset(-1, 0).Activate
Loop
'Add the page break
If ActiveCell.FormulaR1C1 <> "Site ID" Then
ActiveCell.Offset(1, 0).Activate
shtDeliveryVariance.HPageBreaks.Add ActiveCell
End If
Loop
One pass and more elegant too. But how much quicker is it? On the small test is takes 54 seconds compared to the original 45 seconds, and on the larger test my code is slower again at 153 to 130 seconds. And this is averaged over 3 runs too.
So my questions are: Why is my newer code so much slower than the original despite mine looking faster and what can I do to speed up the slowness of the code?
Note: Screen.Updating, etc. is already off as is Calculation etc.