Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Office Новый топик    Ответить
 Итоги по страницам (вставить пять дополнительных строк)  [new]
GorOleg
Member

Откуда: Москва
Сообщений: 78
В сети много примеров расстановки итогов по странице, когда в конце вставляется 1-2 дополнительные строки. Мне понадобилось вставлять не одну, а пять строчек в конце каждой страницы. Перед началом работы макроса можно в переменную пометить количество страниц на листе документа и в цикле, в конце каждой страницы вставить требуемые строки. На маленьких документах все работало, но на больших документах вставляя по 5 строк мы меняем общее количество страниц на листе и цикл прекращается еще до того как достигнута последняя страница.
Как правильно написать условие в цикле (Do While) ? Сейчас сделал вообще без цикла, но некрасиво.
Option Explicit

Const FIRST_ROW& = 9
Const FIRST_COL$ = "AA"
Const LAST_COL$ = "AJ"
Const ROW_HEIGHT = 11.25
Sub CreatePageSubtotals()
On Error GoTo ErrorHandler
' Итоги по страницам
Dim viewState, hpb As HPageBreak, iRow1&, iRow2&, iRowPB&, iPB&, PN&
ThisWorkBook.Sheets("стр.2").Select
viewState = ActiveWindow.View
ActiveWindow.View = xlPageBreakPreview


  PN = 1
CicleStart:
    iRow2 = ActiveSheet.HPageBreaks(PN).Location.Row
        
    PN = PN + 1
    Rows(iRow2).Insert
    Cells(iRow2, "B") = PN '"Итого по странице"
    
    iRow2 = iRow2 + 1
    
    Rows(iRow2).Insert
    Cells(iRow2, "B") = iPB '"Порядковых номеров на странице"
    iRow2 = iRow2 + 1
             
    Rows(iRow2).Insert
    Cells(iRow2, "B") = iRow2 '"На сумму фактически:"
    
       
    iRow2 = iRow2 + 1
    Rows(iRow2).PageBreak = xlPageBreakManual
    
    GoTo CicleStart  'выход будет по ощибке ActiveSheet.HPageBreaks(PN).Location.Row
    
ErrorHandler:

   iRow2 = Cells(Rows.Count, 1).End(xlUp).Row + 1
    
    Rows(iRow2).Insert
    Cells(iRow2, "B") = PN '"Итого по странице"
    
    iRow2 = iRow2 + 1
    
    Rows(iRow2).Insert
    Cells(iRow2, "B") = iPB '"Порядковых номеров на странице"
    iRow2 = iRow2 + 1
             
    Rows(iRow2).Insert
    Cells(iRow2, "B") = iRow2 '"На сумму фактически:"
End Sub
1 дек 18, 20:38    [21751119]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Office Ответить