Vba excel разрывы страниц

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).

page break preview mode

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.
insert horizontal row page break excel vba

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).
insert column page break excel vba

Result:
insert horizontal row page break excel vba
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).

insert column vertical page break excel vba

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)

remove column page breaks excel vba
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)

reset all page breaks excel vba

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:

excel page break options

Then navigate to the Advanced subtab in the left menu. Scroll down to Display options for this worksheet and unselect Show Page Breaks.

remove page breaks from normal view mode excel

<!–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
 

Sla_0412

Пользователь

Сообщений: 206
Регистрация: 17.11.2013

В моем примере необходимо вставлять вертикальный разрыв страницы на следующих условиях:
Если в полях проверки стоят «графика» и «номер» то разрыв перемещаем до текста выше. Текстовых строк может быть от 0 и более между графикой. Графика всегда 8 строк.
Предполагается что данных много, выполнять надо в цикле как я понимаю…

Изменено: Sla_041219.03.2020 19:01:14

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

#2

29.04.2015 20:06:04

Цитата
как я понимаю…

А я, так понимаю, что нужен горизонтальный разрыв

 

Sla_0412

Пользователь

Сообщений: 206
Регистрация: 17.11.2013

да, мне нужно только по горизонтали

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

#4

29.04.2015 20:08:54

И еще, сколько строк умещается на странице?
Используйте

Цитата
ActiveSheet.HPageBreaks.Add ячейка

разрыв над ячейкой

Изменено: Kuzmich05.05.2015 14:55:22

 

Sla_0412

Пользователь

Сообщений: 206
Регистрация: 17.11.2013

Проблема состоит в том что при использовании ActiveSheet.HPageBreaks.Add ячейка, я смог только сдвинуть первый разрыв, который влияет на последующие разрывы ниже по строкам. те никак не соображу как зациклить обработку если информация всегда размещается вразнобой.(листов множество и комбинации текста и графики разные)

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

#6

29.04.2015 21:30:53

Попробуйте так

Код
Sub Razdel_31()
Dim i As Long
Dim iLastRow As Long
Dim iPage As Long
    iLastRow = Cells(Rows.Count, 4).End(xlUp).Row
      iPage = 1
  For i = 1 To iLastRow
    Do
      If Cells(i, 5) = "графика" Then
        If i + 7 >= 32 * iPage Then Exit Do
        i = i + 8
      Else
        If i + 1 >= 32 * iPage Then Exit Do
        i = i + 1
      End If
    Loop While i < 32 * iPage
        ActiveSheet.HPageBreaks.Add Cells(i + 1, 1)
      iPage = iPage + 1
  Next
End Sub
 

Sla_0412

Пользователь

Сообщений: 206
Регистрация: 17.11.2013

Я может как то неправильно описал задачу, но во первых, файл выложен как пример и привязываться к его размерам высоты строк а так же к ориентации листа никак нельзя. Предполагается использовать метод для разных целей (отчеты разных документов) , на разных компьютерах, с разными принтерами. Во-вторых , он даже в том виде в котором есть, не отрабатывает  свою задачу.(Это легко проверить скопировав текст примера вниз и продолжив ряд строк.
Я вижу алгоритм так: находим первый разрыв, смещаем его на n количество строк вверх до текста. Далее повторяем задачу до конца. Фишка в том что при смещении первого разрыва, остальные «переходят» тоже вверх.

 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

#8

29.04.2015 23:01:43

Цитата
Sla_0412 написал: Фишка в том что при смещении первого разрыва, остальные «переходят» тоже вверх.

И?
По по очереди проверяем все разрывы, если нужно — двигаем.

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

#9

29.04.2015 23:09:21

Попробуйте так

Код
Sub Razdel_31()
Dim i As Long
Dim iLastRow As Long
Dim iPage As Long
Dim iHPBreak As HPageBreak
Dim KolStrok As Long
   For Each iHPBreak In ActiveSheet.HPageBreaks
    iHPBreak.Delete
   Next
  KolStrok = ActiveSheet.HPageBreaks(1).Location.Row - 1
    iLastRow = Cells(Rows.Count, 4).End(xlUp).Row
      iPage = 1
  For i = 1 To iLastRow
    Do
      If Cells(i, 5) = "графика" Then
        If i + 8 >= KolStrok * iPage Then Exit Do
        i = i + 8
      Else
        If i + 1 >= KolStrok * iPage Then Exit Do
        i = i + 1
      End If
    Loop While i <= KolStrok * iPage
        ActiveSheet.HPageBreaks.Add Cells(i, 1)
      iPage = iPage + 1
  Next
End Sub
 

Sla_0412

Пользователь

Сообщений: 206
Регистрация: 17.11.2013

Все работает, но нужно вставить между строкой 6 и 7 On Error Resume Next.
Выражаю огромную благодарность Kuzmich.

 

temash

Пользователь

Сообщений: 13
Регистрация: 21.04.2015

Здравствуйте! У меня вопрос по этой теме. мне надо поставить разрыв перед словом «карточка» (т.е. каждая карточка должна начинаться с новой страницы при печати).
предыдущий макрос у меня почему-то не сработал, наверное там надо что-то поменять, кроме слова графика?
помогите пожалуйста.

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

#12

02.06.2015 12:49:00

Попробуйте так Параметры страницы — Поля верхнее 1, нижнее — 1,5 колонтитулы — 0

Код
Sub Razdel_31()
Dim i As Long
Dim iLastRow As Long
Dim iPage As Long
Dim iHPBreak As HPageBreak
Dim KolStrok As Long
    On Error Resume Next
   For Each iHPBreak In ActiveSheet.HPageBreaks
    iHPBreak.Delete
   Next
  KolStrok = ActiveSheet.HPageBreaks(1).Location.Row - 1
    iLastRow = Cells(Rows.Count, 34).End(xlUp).Row
      iPage = 1
  For i = 2 To iLastRow
    Do
      If Cells(i, 21) = "КАРТОЧКА" Then
        If i + 60 >= KolStrok * iPage Then Exit Do
        i = i + 60
      Else
        If i + 1 >= KolStrok * iPage Then Exit Do
        i = i + 1
      End If
    Loop While i <= KolStrok * iPage
        ActiveSheet.HPageBreaks.Add Cells(i, 1)
      iPage = iPage + 1
  Next
End Sub



 

temash

Пользователь

Сообщений: 13
Регистрация: 21.04.2015

Kuzmich, спасибо, работает!!!

 

temash

Пользователь

Сообщений: 13
Регистрация: 21.04.2015

#14

02.06.2015 18:23:24

захотела сама подогнать макрос под другой файл… видно не дано….. посмотрите, что не так?

Код
Sub Razdel_31()
Dim i As Long
Dim iLastRow As Long
Dim iPage As Long
Dim iHPBreak As HPageBreak
Dim KolStrok As Long
    On Error Resume Next
   For Each iHPBreak In ActiveSheet.HPageBreaks
    iHPBreak.Delete
   Next
  KolStrok = ActiveSheet.HPageBreaks(1).Location.Row - 1
    iLastRow = Cells(Rows.Count, 130).End(xlUp).Row
      iPage = 1
  For i = 2 To iLastRow
    Do
      If Cells(i, 1) = "Расчетный листок за Май 2015" Then
        If i + 25 >= KolStrok * iPage Then Exit Do
        i = i + 25
      Else
        If i + 1 >= KolStrok * iPage Then Exit Do
        i = i + 1
      End If
    Loop While i <= KolStrok * iPage
        ActiveSheet.HPageBreaks.Add Cells(i, 1)
      iPage = iPage + 1
  Next
End Sub

Прикрепленные файлы

  • пример2.xlsx (57.03 КБ)

 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

#15

02.06.2015 19:44:22

Макрос попроще

Код
Sub q()
    Dim r As Range
    Set r = Cells.Find(What:="Расчетный листок", LookAt:=xlPart)
    If Not r Is Nothing Then
        Do
            If r Is Nothing Or r.Row = 1 Then Exit Do
            ActiveSheet.HPageBreaks.Add r
            Set r = Cells.FindNext(r)
        Loop
    End If
End Sub
 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

#16

02.06.2015 20:26:06

Цитата
посмотрите, что не так?

В 130 столбце нет данных, ищите последнюю строку по первому столбцу

Код
 iLastRow = Cells(Rows.Count, 130).End(xlUp).Row
 

temash

Пользователь

Сообщений: 13
Регистрация: 21.04.2015

RAN, спасибо большое, работает
Kuzmich, поняла, спасибо

ВЫ ГЕНИИ!!!!!

 

eka0043

Пользователь

Сообщений: 1
Регистрация: 16.05.2019

Ребята, помогите, плиз прописать макрос. У самой ничего не получается. В табличке, которая прикреплена,  нужен разрыв страницы по первой колонке «ветка». И чтобы на одной страничке было только 23 строки.
Буду очень благодарна за помощь

 

adventy

Пользователь

Сообщений: 24
Регистрация: 05.04.2013

#19

19.03.2020 17:48:19

Цитата
RAN написал:
Макрос попроще

Добрый день.
Подскажите, пожалуйста, какие изменения нужно внести в Ваш макрос, чтобы разрывы проставлялись каждые N строк (например, каждые 30 строк)?

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

#20

20.03.2020 13:35:29

Цитата
чтобы на одной страничке было только 23 строки.
Код
Sub ВставитьРазрыв()   
Dim i As Long
Dim iLastRow As Long
  iLastRow = Cells(Rows.Count, "A").End(xlUp).Row
  ActiveSheet.ResetAllPageBreaks
    i = 24
 Do While i < iLastRow
    ActiveSheet.HPageBreaks.Add ActiveSheet.Range("A" & i)
    i = i + 23
 Loop
End Sub

Изменено: Kuzmich20.03.2020 14:58:53

 

adventy

Пользователь

Сообщений: 24
Регистрация: 05.04.2013

Спасибо

Kuzmich

, я это тоже искал!

 

Vitalio

Пользователь

Сообщений: 8
Регистрация: 09.04.2019

#22

21.10.2020 13:34:43

Здравствуйте, уважаемые!

Если можете, помогите, пожалуйста, с похожей задачей.

Есть стандартная накладная в которой есть шапка накладной, тело (таблица с товарами), а так же подписи.
При печати документа бывает так, что подпись (или ее часть) отрываются от основной части таблицы.
Параметры печати: вписать все столбцы на одном листе. Все поля по 0,8 см. Колонтитулы по 0 см.

Можно ли проверить находятся начало подписи и конец на одном листе и, если да, то проверить не оторвана ли подпись от основной таблицы? И в зависимости от сложности реализации или уменьшить на 1 выводимые на печать количество страниц или добавить разрыв перед последней строкой табличной части?

Визуально можно посмотреть в прилагаемом файле.

Прикрепленные файлы

  • разрыв страницы.xlsx (93.08 КБ)

Изменено: Vitalio21.10.2020 13:35:13
(Добавил файл)

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.

Для вас может быть легко и просто вставить разрыв страницы в рабочий лист. Иногда требуется вставить разрывы страниц в каждые 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 строки. Смотрите скриншот:
док-вставка-страница-разрыв-x-строки-1

4. Нажмите OK, а затем вставит разрыв страницы в каждые X строк.

Быстро вставлять разрыв страницы в каждую (n-ю) строку активного листа

Обычно мы вставляем один разрыв страницы при нажатии Макет страницы > Перерывы > Вставить разрыв страницы. Но таким образом слишком утомительно вставлять несколько разрывов страниц в лист, например, вам нужно вставлять один разрыв страницы в каждую строку для печати каждой строки на отдельной странице. Не волнуйся! Kutools for ExcelАвтора Вставить разрыв страницы в каждую строку утилита поможет вам легко его заархивировать!

рекламная вставка разрыв страницы в каждой строке 3

Пакетная вставка разрывов страницы после каждых 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-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (3)


Оценок пока нет. Оцените первым!

Запись от Alex_Gur размещена 24.09.2015 в 15:15

Обновил(-а) Alex_Gur 28.01.2016 в 11:56


Работа со страницами в Excel и в Word существенно отличается из-за различия в объектных моделях Excel и Word.
Если в Word страницы входят в коллекцию

Visual Basic
1
ActiveDocument.ActiveWindow.Panes(1).Pages

и обращение к ним производится по типу:

Visual Basic
1
ActiveDocument.ActiveWindow.Panes(1).Pages(1).Rectangles(1).Range.Text

то в Excel работа со страницами производится с помощью коллекций разрывов страниц соответственно по вертикали и по горизонтали

Visual Basic
1
ActiveSheet.HPageBreaks

и

Visual Basic
1
ActiveSheet.VPageBreaks

.

Приведенные далее макросы для работы со страницами в Excel нужно помещать в модули группы Modules.

Количество страниц по вертикали

Visual Basic
1
2
3
4
5
Sub GetPrintPagesCount1()
   Dim intPagesCount As Integer
   intPagesCount = ActiveSheet.HPageBreaks.Count + 1
   MsgBox "Количество страниц по вертикали: " & intPagesCount
End Sub

Количество страниц по горизонтали

Visual Basic
1
2
3
4
5
Sub GetPrintPagesCount1()
   Dim intPagesCount As Integer
   intPagesCount = ActiveSheet.VPageBreaks.Count + 1
   MsgBox "Количество страниц по горизонтали: " & intPagesCount
End Sub

Проверка количества страниц по горизонтали (если оно не должно превышать 1)

Visual Basic
1
2
3
4
5
6
7
8
9
Sub GetPrintPagesCount1()
    Dim intPagesCount As Integer
    intPagesCount = ActiveSheet.VPageBreaks.Count + 1
    If intPagesCount > 1 Then
        MsgBox "Файл не умещается в ширину на страницу. Количество страниц по горизонтали: " & intPagesCount
    Else
        MsgBox "Файл умещается в ширину на страницу. Количество страниц по горизонтали: 1"
    End If
End Sub

Общее количество страниц на активном листе

Visual Basic
1
2
3
4
5
6
Sub GetPrintPagesCount1()
   Dim intPagesCount As Integer
   intPagesCount = (ActiveSheet.HPageBreaks.Count + 1) * _
       (ActiveSheet.VPageBreaks.Count + 1)
   MsgBox "Всего страниц: " & intPagesCount
End Sub

или

Visual Basic
1
2
3
Sub pages01()
    MsgBox Worksheets(1).PageSetup.Pages.Count
End Sub

Количество страниц на всех листах книги

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub GetPrintPagesCount()
   Dim wshtSheet As Worksheet
   Dim intPagesCount As Integer
   ' Суммирование количества страниц, необходимых для печати всех _
    листов книги
   For Each wshtSheet In Worksheets
      intPagesCount = intPagesCount + (wshtSheet.HPageBreaks.Count + 1) * _
       (wshtSheet.VPageBreaks.Count + 1)
   Next
   MsgBox "Всего страниц: " & intPagesCount
End Sub

Вставка пользователем разрыва страницы

Пользовательский разрыв страницы устанавливается над ячейкой, указанной в качестве параметра Before.

Visual Basic
1
2
3
4
Sub HPageBreaksAdd1()
    ' Вставить разрыв страницы
    ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
End Sub

Вместо ячейки ActiveCell в данном коде можно указать ячейку с определенным произвольным адресом.

Внимание! После установки пользовательского разрыва страницы автоматические разрывы, устанавливаемые программой перед печатью, могут быть автоматически изменены.

Удаление пользовательского разрыва страницы с определенным номером

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

Visual Basic
1
2
3
4
5
Sub HPageBreaksDel1()
' Удалить разрыв страницы
    ActiveSheet.HPageBreaks(4).Delete
    ' 4 - это порядковый номер удаляемого пользовательского разрыва страницы
End Sub

Удаление пользовательского разрыва страницы над указанной ячейкой

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

Visual Basic
1
2
3
4
5
6
7
8
Sub HPageBreaksDel2()
    Dim i As Integer
    For i = 1 To ActiveSheet.HPageBreaks.Count
        If ActiveSheet.HPageBreaks(i).Location.Row = ActiveCell.Row Then
            ActiveSheet.HPageBreaks(i).Delete
        End If
    Next
End Sub

Вместо ячейки ActiveCell в данном коде можно указать ячейку с определенным произвольным адресом.

Печать только первой страницы

Visual Basic
1
2
3
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Sheets("Sheet1").PrintOut From:=1, To:=1
End Sub

Всего комментариев

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

расстановка разрыва страниц по условию

luny

Дата: Понедельник, 10.11.2014, 12:19 |
Сообщение № 1

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 101


Репутация:

0

±

Замечаний:
40% ±


Excel 2003

добрый
есть список абонентов — размер листа несколько меньше формата А6 — нужно согласно этого формата расставить разрывы страниц — при условии что каждый город начинается с отдельного листа — т.е. после последнего разрыва (он же новый город) до следующего разрыва (следующий город) если количество строк больше чем определенное добавить разрыв
начало городов можно проставить вручную можно и автоматом по условию
пример
зы — в примере не указал что в кое где вместо номера может быть пустая ячейка — начало/конец города по этому параметру не найти…

Сообщение отредактировал lunyПонедельник, 10.11.2014, 12:24

 

Ответить

luny

Дата: Понедельник, 10.11.2014, 15:12 |
Сообщение № 2

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 101


Репутация:

0

±

Замечаний:
40% ±


Excel 2003

пока идея какая
1) ищем циклом последний разрыв страницы — это будет переменная L
2) ЕСЛИ диапазон строк rw1 от L до L-30 (30 это количество строк в странице) не содержит в 4 ряду маркер начала города (символ *)
то L-30 разрыв страницы
3) если есть символ * то rw1 разрыв страницы

ну я думаю вы поняли что я недалекий и помогите с реализацией

 

Ответить

krosav4ig

Дата: Понедельник, 10.11.2014, 15:53 |
Сообщение № 3

Группа: Друзья

Ранг: Старожил

Сообщений: 2346


Репутация:

989

±

Замечаний:
0% ±


Excel 2007,2010,2013

сколько? точно, в граммах
По поводу размера бумаги. Ставьте любой виртуальный принтер, выбираете его по умолчанию, создаете в настройках нужный формат бумаги. После этого в excel можно выбрать созданный формат в качестве размера листа и не нужно будет считать строки.

в файл добавил 2 именованных диапазона
[vba]

Код

Sub QWE()
Dim dic, cell As Range, arr, k&
        Set dic = CreateObject(«scripting.dictionary»)
        For Each cell In [города]
            dic.Add [список].Find(cell).Row, cell.Value
        Next
        arr = dic.keys
        For k = 1 To UBound(arr)
            Me.HPageBreaks.Add before:=Range(«список»)(arr(k))
        Next
        Set dic = Nothing
End Sub

[/vba]

К сообщению приложен файл:

5239570.xls
(34.5 Kb)


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4igПонедельник, 10.11.2014, 16:09

 

Ответить

luny

Дата: Понедельник, 10.11.2014, 16:20 |
Сообщение № 4

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 101


Репутация:

0

±

Замечаний:
40% ±


Excel 2003

krosav4ig, городов 82 шт…. они иногда без моего ведома меняются — отследить есть ли » * » реально проще — ИМХО

сколько? точно, в граммах

формат высота 13см * ширина 9 см
на печать будет выводится в формате 4 страницы на лист — т.к. предлагаете вы не получается — уже пробовал — принтер -гад- выводит по 1 странице на листе почему то — посему лучше дробить по 30 строк и голова не болеть

 

Ответить

mikaelw

Дата: Понедельник, 10.11.2014, 16:25 |
Сообщение № 5

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 153


Репутация:

1

±

Замечаний:
0% ±


Excel 2010, 2013, 2016

выводит по 1 странице на листе почему то

У меня подобная задача!

И все сработало!

 

Ответить

luny

Дата: Понедельник, 17.11.2014, 18:57 |
Сообщение № 6

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 101


Репутация:

0

±

Замечаний:
40% ±


Excel 2003

помогите корректно задать диапазон
For rw1 = i To (i-30)

[vba]

Код

Sub Test()
With ActiveSheet
If .HPageBreaks.Count > 0 Then
Dim pb As HPageBreak, rngHPB As Range
Set rngHPB = .HPageBreaks(.HPageBreaks.Count).Location
i = rngHPB.Row ‘положение последнего разрыва
For Each pb In .HPageBreaks
Set rngHPB = pb.Location
i = rngHPB.Row — 1 ‘Номер строки перед разрывом страницы
For rw1 = i To (i-30)
If .Cells(rw1, 3) = «=» Then
‘проверка есть ли в диапазоне 30 строк новый город
.HPageBreaks.Add Before:=Cells(rw1-1, 1)
‘добавить розрыв строки перед новым городом
End If
Next pb
End If
End With
End Sub

[/vba]

 

Ответить

luny

Дата: Вторник, 18.11.2014, 09:35 |
Сообщение № 7

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 101


Репутация:

0

±

Замечаний:
40% ±


Excel 2003

обнаружил что в макросе ошибка
— расстановку границ надо делать сверху вниз — а не как у меня
— в цикле проверки есть ли в 30 строках сверху новый город непонятно как задать что нового города не было и поставить на 30 строке разрыв страницы — if then наверное не сработают — do while — наверное то же — нужен счетчик сколько раз в диапазоне 30 строк был маркер нового города

 

Ответить

luny

Дата: Вторник, 18.11.2014, 10:22 |
Сообщение № 8

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 101


Репутация:

0

±

Замечаний:
40% ±


Excel 2003

почему то не работает — помогите

[vba]

Код

Sub Test1()
With ActiveSheet
If .HPageBreaks.Count > 0 Then
Dim pb As HPageBreak, rngHPB As Range
Set rngHPB = .HPageBreaks(.HPageBreaks.Count).Location
i = rngHPB.Row ‘положение последнего разрыва
For Each pb In .HPageBreaks
Set rngHPB = pb.Location
i = rngHPB.Row — 1 ‘Номер строки перед разрывом страницы
k = 1
Do While k = i
For t = k To i * 30
If Cells(t, 3) = «*» Then
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=Cells(t, 1)
k = k + t
Else: ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=Cells(k + 30, 1)
k = k + 30
End If
Next
Exit For

Loop
Next pb
End If
End With
MsgBox «Закончено»
End Sub

[/vba]

Сообщение отредактировал lunyВторник, 18.11.2014, 10:23

 

Ответить

Pelena

Дата: Вторник, 18.11.2014, 11:25 |
Сообщение № 9

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

luny, Вы уже столько тем однотипных насоздавали, что можно запутаться.
Я правильно понимаю: есть таблица из двух столбцов: в первом число, во втором текст. В третьем столбце напротив названия города стоит *.
Нужно расставить разрывы страниц по * либо, если между звёздочками больше 30 строк, то дополнительно через каждые 30 строк после *. Так?


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

luny

Дата: Вторник, 18.11.2014, 12:19 |
Сообщение № 10

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 101


Репутация:

0

±

Замечаний:
40% ±


Excel 2003

Pelena, [offtop]пусть это однотипные темы но они решают вопрос (пусть один и тот же) разными способами — вопрос «2+2=» эксель может дать ответ десятком способом — глупо пользоваться только одним — под конкретный способ тема лежит в своей части форума (искренне не понимаю, что не понравилось серж 007, когда он рейтинг мне понизил…) … Да этот макрос возможно будет частью следующего — НО он является самостоятельной частью — может быть кому то полезен …в инете полно тем типа — разрыв страниц после слова ИТОГ или ОТЧЕТ — чем моя хуже…- замените город № словом отчет если не нравиться…

Нужно расставить разрывы страниц по * либо, если между звёздочками больше 30 строк, то дополнительно через каждые 30 строк после *. Так?

правильно

 

Ответить

Pelena

Дата: Вторник, 18.11.2014, 12:34 |
Сообщение № 11

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Такой вариант посмотрите
[vba]

Код

Sub Test1()
      Dim k&, nrow&, t&
      With ActiveSheet
          k = 1
          nrow = .Cells(Rows.Count, 3).End(xlUp).Row
          Do While k <= nrow
              t = WorksheetFunction.Min(.Range(Cells(k, 3), Cells(nrow, 3)).Find(«*»).Row, t + 30)
              .HPageBreaks.Add Before:=Cells(t, 1)
              k = t + 1
          Loop
      End With
      MsgBox «Закончено»
End Sub

[/vba]

К сообщению приложен файл:

5799161.xls
(37.0 Kb)


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

luny

Дата: Вторник, 18.11.2014, 12:45 |
Сообщение № 12

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 101


Репутация:

0

±

Замечаний:
40% ±


Excel 2003


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

 

Ответить

Pelena

Дата: Вторник, 18.11.2014, 15:27 |
Сообщение № 13

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

[offtop]
Даже не знаю, обидеться что ли…[/offtop]

Предыдущий макрос некорректно отрабатывал, если в последнем городе больше 30 записей. Исправленный вариант в файле

К сообщению приложен файл:

8816526.xls
(60.5 Kb)


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

luny

Дата: Вторник, 18.11.2014, 15:46 |
Сообщение № 14

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 101


Репутация:

0

±

Замечаний:
40% ±


Excel 2003

Pelena, еще раз спс

зы — поинтересоваться хотел — мой вариант макрос вообще был ли жизнеспособным

Сообщение отредактировал lunyВторник, 18.11.2014, 15:51

 

Ответить

Pelena

Дата: Вторник, 18.11.2014, 15:58 |
Сообщение № 15

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Ну, мне не удалось вдохнуть в него жизнь :(
Хотя я использовала его как отправную точку


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

luny

Дата: Вторник, 18.11.2014, 17:30 |
Сообщение № 16

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 101


Репутация:

0

±

Замечаний:
40% ±


Excel 2003

Pelena,

Даже не знаю, обидеться что ли…

[offtop]тут не на что обижаться — просто выражение эмоций — так же если б я сказал о степени вязкости вещества — в смысле — круто!

 

Ответить

Serge_007

Дата: Вторник, 18.11.2014, 17:46 |
Сообщение № 17

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

что не понравилось серж 007, когда он рейтинг мне понизил

luny, я никогда и никому рейтинг не понижаю. Лично Вам я вынес два замечания, и их причины указаны при вынесении


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

luny

Дата: Вторник, 18.11.2014, 18:00 |
Сообщение № 18

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 101


Репутация:

0

±

Замечаний:
40% ±


Excel 2003

Serge_007,
[offtop]я неверно выразился про замечания…причину я видел — я не понял как она связана со мной… — в 1 случае не было примера — хотя он был — кривой худой но был — по второму — печать 4 страниц и копирование страниц макросом разве одно и то же — да даже если одно и то же название — мне может было интересно как конкретную задачу можно решить различными способами — в первом случае например при помощи функций или возможностей принтера — во второй только макросом… — еще момент вы похоже мне сообщение оставили — вместо него вылазит сообщение — обратитесь к администрации чтоб прочесть — а обратиться не могу т.к. у администрации стоит запрет на письма от таких как я…
ЫШО — я не ищу справедливости я просто донес информацию

 

Ответить

luny

Дата: Суббота, 22.11.2014, 13:19 |
Сообщение № 19

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 101


Репутация:

0

±

Замечаний:
40% ±


Excel 2003

Pelena, добавил строку чтоб перед началом расстановки новых разрывов сносились старые — без нее макрос к старым разрывам добавляет новые..
[vba]

Код

With ActiveSheet
[b]ActiveSheet.ResetAllPageBreaks[/b]
k = 1

[/vba]

Сообщение отредактировал lunyСуббота, 22.11.2014, 13:19

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Vba excel разработка макросов
  • Vba excel разницу во времени
  • Vba excel размеры ячейки
  • Vba excel свойства формы
  • Vba excel размеры массива