Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


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

Собственно проблема такая: имеется лист с несколькими сотнями отчетов по людям (заголовок отчетов стандартный и поиском выделить не проблема). Сложность лишь в том, чтобы при печати, каждый отчет начинался с нового листа (как-правило, они могут занимать от одной до 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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Печать 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 10:11


18:36.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru