Разрыв страницы excel миф

 

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
(Добавил файл)

Запись от 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

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

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.

Polundra_Pi

Гость


Доброго воремени суток!
Не знаю по адресу обращаюсь или нет, но рассчитываю на Вашу помощь,
уважаемые учасники Форума.
Постараюсь поянить в чём дело, тоесть для чего мне нужны подобные вещи.
С одной иерархической БД (Лотус) в Эксель выводится отчёт для каждой выбраной
организации На всех листа отчёта толжно писаться с 1-ой по 9-ю  строчку  почти одно и тоже, кроме строчки номер 4-ре. Свойство PrintTitleRows класса PageSetup очень полезная вещь, только мне его мешает использовать, то что Экселю не можно задать
такую запись
ActiveSheet.PageSetup.PrintTitleRows = «$1:$3;$5:$9», тоесть мне надо выводить на каждой странице все строчки с первой по девятую кроме четвёртой.
В четвёртой строчке пишется некоторый отчётный параметр, точнее организация,
выбранная из списка, отчёт строится циклом Фоал … енд Фоал, причом перед каждым новым выполнением этого цыкла я указываю для разрыва страницы
xlSheet.HPageBreaks.Add(xlSheet.Cells(i, j)). Но как определить произошол ли разрыв страницы сам по себе я , прощу прощения,так и не понял. Я хочу просто шапку тейблы копировать на каждую новую страницу и в строчку номер 4 вписывать скриптом нужную организацию.
Поскажите как решить такую проблему?


Записан
HandKot

Молодой специалист

ru
Offline Offline


может создать процедуру, которая и будет писать эти строки

public sub CreateHeader(i as integer)
  xlSheet.Cells(i,1) = «sdfsddfs»
  xlSheet.Cells(i+1,1) = «sdfsddfs»
  xlSheet.Cells(i+3,1) = «sdfsddfs»
  xlSheet.Cells(i+5,1) = «sdfsddfs»
end sub

public sub Main()
  For Each
   …
   …
   xlSheet.HPageBreaks.Add(xlSheet.Cells(i, j))
   CreateHeader
  Next
end sub


Записан

I Have Nine Lives You Have One Only
THINK!

Polundra_Pi

Гость


может создать процедуру, которая и будет писать эти строки

public sub CreateHeader(i as integer)
  xlSheet.Cells(i,1) = «sdfsddfs»
  xlSheet.Cells(i+1,1) = «sdfsddfs»
  xlSheet.Cells(i+3,1) = «sdfsddfs»
  xlSheet.Cells(i+5,1) = «sdfsddfs»
end sub

public sub Main()
  For Each
   …
   …
   xlSheet.HPageBreaks.Add(xlSheet.Cells(i, j))
   CreateHeader
  Next
end sub

Спасибо, что откликнулись!
Ничего притив не имею, xlSheet.HPageBreaks.Add(xlSheet.Cells(i, j)) — разрыв выше указанной ячейки, процедура CreateHeader — выводит шапку таблицы,
но мне надо определить, когда призошол разрыв страницы сам по себе, тоесть когда отчётная таблица перевалилась на новую страницу, а потом вствлять шапку отчётной тейблы после того как разрыв страницы имел место. Да, то что Вы предложили справедливо новая организация встравляется разрыв страницы, на которую выводится шапка с вписаной в нужном месте органмзацией. Но как же все-таки определить разрыв страницы сам по себе?
Я планировал отчёт для каждой новой организации выводить на новом Экселевсом Листе,
тогда в отчётном цыкле я укажу PrintTitleRows = «$1:9», и для каждой организации все должно быть как положено с шапкой, но как быть с нумерацией страниц отчёта, напр., на листе 3 последняя страница была 17, тогда на листе 4 первая должна быть 18 и тд. И как учитывать  нумерацию, на удалённых листах, на которых вывелась одна только шапка, а данных нету их нумеровать не нужно.


Записан
Sla

Команда клуба

ua
Offline Offline
Пол: Мужской

WWW


HPageBreaks — это коллекция
пробегаешь по коллекции и соответсвенно нумеруешь страницы


Записан

Мы все учились понемногу… Чему-нибудь и как-нибудь.

Polundra_Pi

Гость


HPageBreaks — это коллекция
пробегаешь по коллекции и соответсвенно нумеруешь страницы

Если я Вас правильно понял, то в цикле по организациям после того как заполнена отчетная таблица для i-ой организации на i-ом Листе нужно вставить цикл типа
For Each pb in Worksheets(i).HPageBreaks
If pb.Extent = xlPageBreakFull Then
Kolpage = Kolpage+ 1
End If
Next
А попом указать для свойства
 .FirstPageNumber = page0+Kolpage?
А не можно ли последний номер страниц на текущем листе как-то определить с помощю кодов форматирования, задающих номера страниц, напр из этого Ен
.CenterHeader = «Страница &P из &N»,
а потом для нового листа  .FirstPageNumber=N+1, только наверное  &N не выйдет в интеджер конвертнуть для прибавления , а потом в стринг?


Записан
Sla

Команда клуба

ua
Offline Offline
Пол: Мужской

WWW


Polundra_Pi, ты предложил, ты и пробуй Улыбаюсь
затрудняюсь сказать


Записан

Мы все учились понемногу… Чему-нибудь и как-нибудь.

Polundra_Pi

Гость


Polundra_Pi, ты предложил, ты и пробуй Улыбаюсь
затрудняюсь сказать

Я-то пробую, только затрудняюсь получить конкретный результат ведь возле &P и &N мешает символ
&.
Попробую с pb.Extent = xlPageBreakFull .
Если будут какие-то предлжения как вывести тейблу на одном Экселевсом Листе, без выведения новых организаций на новых листа, то я Вас охотно выслушаю, и есле Вы не притв ими поделиться
Кстати, помимо этого интересно не видел такой инфы какой максимум Листов
И по проще,сорри, как програмно послать на печать содержимое всех Листов сразу без цикла для печати по листам, одной коммандой.


Записан
HandKot

Молодой специалист

ru
Offline Offline


может тогда использовать св-во

xlSheet.HPageBreaks.Count

тогда получим

Public Sub Report()
    Dim iPage As Integer
    Dim xlSheet As Worksheet

        iPage = 1
    For i = 1 To [Кол-во отчетов]

                ‘добавляем новый лист для отчета
        xlSheet = Workbook.Worksheets.Add
        xlSheet.PageSetup.PrintTitleRows = «$1:9»
        xlSheet.PageSetup.FirstPageNumber = iPage

                ‘ Фомируем отчет
        …
        …

                ‘ выбираем номер страницы для следующего отчета
        iPage = xlSheet.HPageBreaks.Count + 1
    Next i
End Sub

« Последнее редактирование: 16-12-2007 17:31 от Алексей1153++ »
Записан

I Have Nine Lives You Have One Only
THINK!

HandKot

Молодой специалист

ru
Offline Offline


И по проще,сорри, как програмно послать на печать содержимое всех Листов сразу без цикла для печати по листам, одной коммандой.

вероятно

Workbook.PrintOut


Записан

I Have Nine Lives You Have One Only
THINK!

Polundra_Pi

Гость


Я счас протестирую, возможно что-то выйдет, если возникнут какие-то трудности и у Вас, уважаемые учасники Форума будет желание и свободная минутка, чтобы их разрешить, то я сообщу о
них тут


Записан
Polundra_Pi

Гость


Не хочу огорчать помагающих, но идея с iPage не работает, особо привело в удивление другое
Напр., Задал начальное значение iPage=3, смотрю Параметры страниц первого Листа, да первая страница № 3,
но на остальных почемуто № 1. Как-то странно прямо и удивительно, что может быть не так.
А также почему-то у меня с Листа4 перескакиевает на Лист3 и начинает там выводить отчёт для организации №4.
С вторым как-то может мжно разобраться, но разьясните как разрешить первый вопрос с нумерацией страниц на всех Листах


Записан
Sla

Команда клуба

ua
Offline Offline
Пол: Мужской

WWW


код в студию
но не забывай worksheets массив или коллекция
пробегаешь в цикле по всем листам устанавливаешь правильный iPage для каждого листа


Записан

Мы все учились понемногу… Чему-нибудь и как-нибудь.

Polundra_Pi

Гость


код в студию
но не забывай worksheets массив или коллекция
пробегаешь в цикле по всем листам устанавливаешь правильный iPage для каждого листа

Нима проблем, там ничего особенного нету и код не составляет гостайну, так что я могу
 привести необходимые выдердки с кода, которые касаются проблемы последовательной нумерации
страниц на всех Листах. Код с небольшими сокращениями некасающимися непосредственно нумерации и коментариями, чтобы ввести в то, что делается в целом.
REM Вначале идёт описание и задание Лотусовских елементов, которые будут использованы при   построении отчёта

     Sub Click(Source As Button)
     Dim session As New NotesSession
     Dim db As NotesDatabase
     Set db = session.CurrentDatabase
     Dim doc As NotesDocument

          Dim wos As New NotesUIWorkspace
     Dim uidoc As notesuidocument
     Set uidoc=wos.currentdocument
     Call uidoc.Refresh ‘Обновление всех полей текущего дока перед отчётоформированием

          Dim column As NotesViewColumn

          Torg=uidoc.document.orgs(0)

          If Torg=»» Then Exit Sub
     BOX=uidoc.document.GetItemValue(«orgs») ‘Список организаций выбранных юзером, по которым строят отчёт.

          Set view = db.GetView( «Osobisti» ) ‘Название вида в котором хранится доки, с которых циклом Вайл …  Енд Вайл выбираются отчётные данные
REM Дальше идет определение значений констант Экселя, в соответствии со справкой по ВБА,
которые использовались в дальнейшем.
…..
REM  Дальше иницилизируем Эксель для работы с ним через Лотус Нотес.
 Set EWindow = CreateObject(«Excel.Application»)

          If EWindow  Is Nothing Then
          message$ = «Ошибка при запуске Excel.» & Chr$( 10 ) & _
          «Может он у Вас не инсталлирован.»
          Msgbox message$, 16, «Excel не запускается»
          Exit Sub
     End If

          EWindow.Caption=»ПЕРЕЧЕНЬ ПО ОРГАНИЗАЦИЯМ» ‘Заголовок Эксель-окна
     Set WorkBooks=EWindow.Workbooks
     WorkBooks.Add
     sh=1 ‘Number WorkSheet
     page0=uidoc.document.pagenumber(0)
%REM
Поле в текущем документе, куда юзер вводит начальный номер страницы, номер нимоно хранить где-то из-за того, что есть такие отчёты которые нужно составлять от руки, а нумерация у печатных и отчётов заполненных руками должа быть одинаковой
%END REM
     Forall TipOrg In BOX ‘Цикл по выбранным организациям из поля orgs. Если не ошибаюсь аналог цикла  For Each … Next

                    If ( sh>3 ) Then ‘Добавляем новый Лист новый, когда sh>3, ведь три Листа уже есть
               Call   ws.Select
               EWindow.Sheets.Add 
          End If       
          Set ws=EWindow.Workbooks(1).Worksheets(sh)
          With EWindow.Workbooks(1).Worksheets(sh).PageSetup
               .Orientation = xlLandscape
               .FirstPageNumber = page0
                   ….. ‘ и тд
          End With
          Call ws.Activate
          EWindow.visible=True ‘Делать Эксель видимым юзерю при отчётопостроении
          ‘Дальше идет заполнение шапки таблицы
          ……
          ‘Потом заполнение самой отчётной тейблы цыклом Вайл … Енд Вайл
              m=12 ‘Строка с которой начинается отчётозаполнение
          Set   doc=view.GetFirstDocument
          While Not ( doc Is  Nothing) ‘цикл непосредственного заполнения тейблы данными при определённых условиях, указанныю юзером, пробегается по всем документам представления виев
               If   
….
   End If
               Set doc = view.GetNextDocument(doc)
          Wend
         ‘Оформляем тейблу (проводим линии, звадаем шрифты, словом делаем форматирование всей тейблы)
          sh=sh+1 ‘Новое выполнение цикла новый номер Листа
          page0=ws.HPageBreaks.Count+1 ‘Вот собственно то, что было предложено Помагающим
     End Forall
     EWindow.visible=True   
     Call ws.Cells(1,1).Select
End Sub

Если будут какие-то предложения, замечания, то, по возможномти, сообщите

« Последнее редактирование: 16-12-2007 17:32 от Алексей1153++ »
Записан
HandKot

Молодой специалист

ru
Offline Offline


page0=ws.HPageBreaks.Count+1 ‘Вот собственно то, что было предложено Помагающим

а если хорошенько подумать и заменить на

page0=ws.HPageBreaks.Count+page0

вот мой тестовый макрос

Public Sub Report()
    Dim iPage As Integer
    Dim xlSheet As Worksheet

        iPage = 1
    For i = 1 To 3

                ‘добавляем новый лист для отчета
        Set xlSheet = ThisWorkbook.Worksheets.Add
        xlSheet.PageSetup.PrintTitleRows = «$1:1»
        xlSheet.PageSetup.FirstPageNumber = iPage
        xlSheet.PageSetup.CenterFooter = «Страница &P из &N»

                ‘ Фомируем отчет
        xlSheet.Cells(1, 1) = «Шапка отчета»
        For j = 1 To 5 — i
            xlSheet.Cells(j * 2, 1) = «Какой-то текст листа » & Str(i)
            xlSheet.HPageBreaks.Add (xlSheet.Cells(j * 2 + 1, 1))
        Next

                ‘ выбираем номер страницы для следующего отчета
        iPage = iPage + xlSheet.HPageBreaks.Count
    Next i
    ‘   xlSheet.PrintOut
    ‘   ThisWorkbook.PrintOut
End Sub

только надо колонтилул поменять, а то пишет 8 страница из 2  Улыбаюсь

« Последнее редактирование: 16-12-2007 17:33 от Алексей1153++ »
Записан

I Have Nine Lives You Have One Only
THINK!

HandKot

Молодой специалист

ru
Offline Offline


дополнения

          If ( sh>3 ) Then ‘Добавляем новый Лист новый, когда sh>3, ведь три Листа уже есть
               Call   ws.Select
               EWindow.Sheets.Add
          End If   

не факт, у меня, к примеру, только 1 лист.
Может лучше пробежаться в начале по всем листам и удалить их, а потом честно добавлять

set ws=EWindow.Sheets.Add

          With EWindow.Workbooks(1).Worksheets(sh).PageSetup
               .Orientation = xlLandscape
               .FirstPageNumber = page0
                   ….. ‘ и тд
          End With

заменить на

          With ws.PageSetup
               .Orientation = xlLandscape
               .FirstPageNumber = page0
                   ….. ‘ и тд
          End With

вообще не использовать конструкцию

EWindow.Workbooks(1).Worksheets(sh)

раз получили объект листа

set ws=EWindow.Sheets.Add

то и работать с ним
раз получили объект книги

Set WrkBk=EWindow.Workbooks.Add

то и работать с ним
и тогда будет меньше возникать ошибок типа

А также почему-то у меня с Листа4 перескакиевает на Лист3 и начинает там выводить отчёт для организации №4.

ЗЫЖ ИМХО

« Последнее редактирование: 16-12-2007 17:33 от Алексей1153++ »
Записан

I Have Nine Lives You Have One Only
THINK!

Polundra_Pi

Гость


Спасибо!, за то, что как говорится на связи
Пробовал и так, но не помогло вывело на все страницах FirstPageNumber тот, который затал перед циклом Фоал, тоесть напр, page0=3, и на всех Листах первый номер равен трём.
Может таким образом считается, а именно
iPage = iPage + xlSheet.HPageBreaks.Count
производится подсчёт полько тех разрывов страниц, а не всех , что установились програмно
xlSheet.HPageBreaks.Add (xlSheet.Cells(j * 2 + 1, 1))?
А с Листами счас сделаю, как Вы посоветовали


Записан
HandKot

Молодой специалист

ru
Offline Offline


iPage = iPage + xlSheet.HPageBreaks.Count

насколько я понял считает кол-во всех разрывов

page0 = page0 + ws.HPageBreaks.Count

на этой строке поставьте бреакпоинт и проверяйте изменяется ли page0


Записан

I Have Nine Lives You Have One Only
THINK!

Polundra_Pi

Гость


С листами сделал как Вы рекомендовали, определик ексель-книгу перед цикло Фоал
               Set WrkBk=EWindow.Workbooks.Add
и в самом цикле поставив 
               Set ws=WrkBk.Sheets.Add.
Как удалить все Листи, ну перед циклом естественно, чтобы только один остался.
Я записал так
                     ForAll WkSt In WrkBk.Sheets
                    Call WkSt.Select
                    EWindow.ActiveWindow.SelectedSheets.Delete
                    End ForAll
Но понятное дело отладчик прервал выполнение скрипта Лотуса, когда Эксель выдал сообщение, что в книге обязательно должна быть хотя бы одна книга, которую удалить не можно.
Я пробовал написать так
                    ForAll WkSt In WrkBk.Sheets
                    If (WkSt<>WrkBk.Sheets(1)) Then
                    Call WkSt.Select
                    EWindow.ActiveWindow.SelectedSheets.Delete
                    End If
                    End ForAll
Но отладчику не понравилась запись в строке с (WkSt<>WrkBk.Sheets(1)), он выдает ошибку Тайп мисматч, несоответствие типов тоесть.
А насчёт page0. Мои сомнения вроде подтвердились ws.HPageBreaks.Count  задаёт количество разрывов заданых програмно ws.HPageBreaks.Add (ws.Cells(i+1, j)). Поставил в цикле Вайл.. Енд Вайл такую строку.Смотрю на первом заполненном Эксель-листе шесть страниц вышло, а на втором заполненном листе FirstPageNumbe=6 и на нем одна страница, на втором FirstPageNumbe=6  тоже.
Тоесть если произошел один разрыв, то страниц две есть, тоесть
iPage = iPage + xlSheet.HPageBreaks.Count+1, но на второй странице может и не быть данных, правда, я вроде зашол в заблуждение.
Наверное нужно другое свойство HPageBreaks или вобще другой метод применять.
Может можно все-таки програмно определить, что произошол разрыв странице са по себе,
тоесть, что достигнут конец страницы, тогда я смогу выводить отчёт для разных организаций на одном Листе, или если на разных, то как их последовательно пронумеровать страницы?


Записан
Polundra_Pi

Гость


Счас буду испробовать
For Each pb in ws.HPageBreaks
If pb.Extent = xlPageBreakFull Then
Kolpage = Kolpage+ 1
End If
Next
Только кроме full-screen page breaks есть еще и print-area page breaks, а они могут совпадать.
Есть у кого-то не пропала охота мне помочь, то, если есть вободная минутка и желание помочь, то помогите, пожалуйста


Записан
HandKot

Молодой специалист

ru
Offline Offline


тута проверил
если использовать метод Workbook.PrintOut, то он сам нормально проставляет номера страниц
и тогда не надо самому выставлять начальную страницу, т.е в вот этом надобность отпадает

.FirstPageNumber = page0
iPage = iPage + xlSheet.HPageBreaks.Count+1


Записан

I Have Nine Lives You Have One Only
THINK!

Polundra_Pi

Гость


тута проверил
если использовать метод Workbook.PrintOut, то он сам нормально проставляет номера страниц
и тогда не надо самому выставлять начальную страницу, т.е в вот этом надобность отпадает

.FirstPageNumber = page0
iPage = iPage + xlSheet.HPageBreaks.Count+1

Тоесть надо будет только указать FirstPageNumber только для самого первого Листа,
а потом все страницы, которые будут находиться на Втором Листах, будут начинаться с немер n+1,
если номер последней странице на Первом Листе был n?
Еще интересно такое можно как-то специфицески настроить Эксель может быть через конфигурационные файлы, чтобы выводилось не три и не четыре, а напр, с 25 Листов.
Кстати, нашол неплохой линк, может Вам пригодится, мне очень и очень пригодился,
там про русский коды форматирования для Экселя, ну напр., если к русскоязычному Экселю обращаться с другого приложения, то вместо ws.PageSetup..RightHeader =»&P» надо писать
ws.PageSetup..RightHeader =»&С»
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=920
Только у меня напр., &С+число  не работает


Записан
HandKot

Молодой специалист

ru
Offline Offline


Тоесть надо будет только указать FirstPageNumber только для самого первого Листа,

да перед печатью задайте такие команды

Set ws = ThisWorkbook.Worksheets(1)
ws.PageSetup.FirstPageNumber = 3
wb.PrintOut

и остальные будут по порядку

Еще интересно такое можно как-то специфицески настроить Эксель может быть через конфигурационные файлы, чтобы выводилось не три и не четыре, а напр, с 25 Листов.

а это не понял


Записан

I Have Nine Lives You Have One Only
THINK!

Polundra_Pi

Гость


Я имел ввиду, чтобы есле создать пустой эксель-файл, то чтобы в нем присутствовали по умолчанию Литст1, Лист2, …., и тд до Лист25, ведь нареное как-то можно так сделать, просто поинтересовался.
О, и еще Эксель добавляет Листы как-то вроде неправильно. Ну напр., Если Стать на Лист3 и Добавить Лист4, то он будет стоять  не после Листа3, а перед ним. А также неясно почему, когда удалить все Листы (было их скажем 6 штук), за исключением одного какого-то, напр., Лита1, а потом добавить, то появится не Лист2, а Лист7. Эксель получается где-то хранит имена даже удалённых Листов?


Записан
HandKot

Молодой специалист

ru
Offline Offline


Я имел ввиду, чтобы есле создать пустой эксель-файл, то чтобы в нем присутствовали по умолчанию Литст1, Лист2, …., и тд до Лист25, ведь нареное как-то можно так сделать, просто поинтересовался.

Сервис-Параметры         вкладка Общие-Листов в новой книге
(но возможно в других версиях Ёкселя этого нет, у меня ХР)

О, и еще Эксель добавляет Листы как-то вроде неправильно. Ну напр., Если Стать на Лист3 и Добавить Лист4, то он будет стоять  не после Листа3, а перед ним. А также неясно почему, когда удалить все Листы (было их скажем 6 штук), за исключением одного какого-то, напр., Лита1, а потом добавить, то появится не Лист2, а Лист7. Эксель получается где-то хранит имена даже удалённых Листов?

скорее хранит не имена листов а некий счетчик, который добавляется к имени листа

ЗЫЖ я всегда листы переименовываю


Записан

I Have Nine Lives You Have One Only
THINK!

Polundra_Pi

Гость


Нашол вкладку есть такая, у меня тоже Excel XP, если это Excel 2002 имеется ввиду.
Также наверное использование обращения к Листам по имени будет понадёжней чем по индексу,
напр,   так Call wb.Sheets(«Организация7»).Select, чем такое Call EWindow.ThisWorkbook.Worksheets(7)
есле организация7 находится на седьмом Листе соответственно?


Записан
Sla

Команда клуба

ua
Offline Offline
Пол: Мужской

WWW


у sheets есть свойство name
организация7 может не обязательно находится на 7 листе


Записан

Мы все учились понемногу… Чему-нибудь и как-нибудь.

Polundra_Pi

Гость


Доброго времени суток, уважаемые учасники Форума!
Звиняйте, что надоедаю, но помогите разобраться до конца.
Мне нужно удалять те листы, которые не содержат данных для организации, тоесть только шапку одну. Для этого я проверяю в конце цикла Фоал заполненная ли первая ячейка А10  отчёта, в которой если есть  данные, то они должны обязательно быть.

   

       If (ws.Cells(10, 1).Value=»») Then
               Call ws.Select
               EWindow.ActiveWindow.SelectedSheets.Delete
          End If

Но перед удалением Эксель выдает сообщение о том, что Лист может содержать данные, если хотите его удалить, то нажлите Удалить. Можно ли делать как-то сделать, чтобы подобное сообщение не выскакивало, а то юзеря не любят когда много раз надо кнопки нажимать Улыбаюсь.
Так же почему-то когда передаю данные с Лотуса Нотеса в Эксель, то выдаётся сообщение типа
ОЛЕ Автомейшен обджект еррор на строке
Set ws = EWindow.ThisWorkbook.Worksheets(1).
Смотрел в хелпе все вроде так ThisWorkbook Member of Excel.Application, ну а EWindow как положено и было  задано Set EWindow = CreateObject(«Excel.Application»). Но свойсва Worksheets у ThisWorkbook
я не нашол, я б записал просто      ws.PageSetup.FirstPageNumber = page0, но у меня может быть такое, именно этот Лист ws будет удалёт из Книги в последнем выполнении цикла?
Метод      wb.PrintOut  протестить возможность не подвернулась, сетевой принтер счас отключен временно, но вреча он работал, хоть бумаги не было. Значит я пустил на печать , а потом отменил для даной книги печать, смотрю просмотр перед печатью, на Первом Листе стоит Первый Номер страниты 3(пейдж0), а на других Листах Авто, смтрю в просморт, а там Первые Страницы с одного начинают для других листов, тоесть этот метод проставлет намера для станиц на других Листах последовательно, только при печати, что  тоже неплохо?

« Последнее редактирование: 15-09-2006 07:02 от Polundra_Pi »
Записан
Sla

Команда клуба

ua
Offline Offline
Пол: Мужской

WWW


This example deletes Sheet3 in the active workbook without displaying the confirmation dialog box.

Application.DisplayAlerts = False
Worksheets(«Sheet3»).Delete
Application.DisplayAlerts = True


Записан

Мы все учились понемногу… Чему-нибудь и как-нибудь.

Polundra_Pi

Гость


Спасибо!
Так помогло
          If (ws.Cells(10, 1).Value=»») Then
               Call ws.Select
               EWindow.DisplayAlerts  =  False
               EWindow.ActiveWindow.SelectedSheets.Delete
               EWindow.DisplayAlerts  = True
          End If
А метод    wb.PrintOut так еще и не пртотестил. Но ничего думаю еще за текущущий день испробую.
Возник вопрос по поводу так называемых «мертвых зон печати», тоесть максимальных значений полей печати, меньше которых значения установить не моно. Так, напр., для одного принтера левое и правое поле по 0,6 см максимум для книжной ориентации, а для другогого прнтера левое 0,4 см, а правое только 1,2 и см и дальше не двигается, тоесть 1 см установить не моно. Эксель как видно учитывает эти «мёртвые зоны печати». Интересует можно ли их как-то определить для каждого принтера значения этих самых «мертвых зон печати», возможно даже через средства ВБА, а потом ствить некоторым полям, напр., теже левым и правым. максилальные  значения для текущего принтера.


Записан

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

Понравилась статья? Поделить с друзьями:
  • Разрешить редактировать excel всем
  • Разрыв рисунка в word
  • Разрешить редактирование в excel как убрать навсегда
  • Разрыв разделов в word это
  • Разрешить редактирование в excel как включить