Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2013, 13:44   #1
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию Двусторонняя печать и разрывы страниц

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

Решил это тупо и в лоб:
1. расставил разрывы по заголовкам
2. сделал список из отчетов и количества листов в нем со ссылками на страницы (перебором всех разрывов на листе)
3. добавил дополнительные разрывы так, чтобы количество листов в отчете стало четным.

но стало интересно, есть ли более удобные варианты решения (поиск выдал, что привязка к конкретной странице - довольно сложный шаманский обряд)

собственно сами макросы:

Код:
Sub Realign()
  Application.ScreenUpdating = False
  Set R = [C:C].Find("Регистр налогового учета по налогу на доходы физических лиц")
  StAdr = R.Address
  Do
    If R.Address <> StAdr Then
      ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=R.Offset(-1)
    End If
    Set R = [C:C].FindNext(R)
  Loop Until StAdr = R.Address
  Application.ScreenUpdating = True
End Sub

Sub Set_List()
  Application.ScreenUpdating = False
    I = 2
    For Each El In ActiveWindow.SelectedSheets.HPageBreaks
      If Left(El.Location.Offset(1, 2), 24) = "Регистр налогового учета" Then
        Sheets("S1").Range("A" & I) = El.Location.Address
        Sheets("S1").Range("B" & I) = 1
        I = I + 1
      Else
        Sheets("S1").Range("B" & I - 1) = Sheets("S1").Range("B" & I - 1) + 1
      End If
    Next El
  Application.ScreenUpdating = True
End Sub

' список для третьей процедуры делал руками через формулу и фильтр, т.к. дело по-сути разовое.

Sub Correct()
Application.ScreenUpdating = False
For I = 136 To 1 Step -1
  S = Sheets("S1").Cells(I, 1)
  Set R = Range(S)
  R.EntireRow.Insert Shift:=xlShiftDown
  ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=R.Offset(-1)
Next I
Application.ScreenUpdating = True
End Sub
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Печать 2-х страниц на одном листе DiakonX Общие вопросы Delphi 7 03.01.2012 08:07
OpenXML, RowBreaks (разрывы страниц) Zer0 C# (си шарп) 1 10.11.2011 10:12
Печать страниц между 2 закладками Окоча Юра Microsoft Office Word 0 04.05.2010 23:48
печать последних 2-х страниц Окоча Юра Microsoft Office Word 0 04.05.2010 23:18
двусторонняя печать отчетов Alex&R Microsoft Office Access 3 15.01.2010 09:11