Текущее время: Ср, июл 23 2025, 13:48

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Макрос VBA для скрепления блока подписей с последней строкой в EXCEL-файле
СообщениеДобавлено: Вт, июл 03 2012, 12:02 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, янв 14 2010, 13:26
Сообщения: 70
Откуда: Санкт-Петербург
Пол: Мужской
Добрый день! Хочу поделиться макросом для EXCEL, думаю для многих будет полезным!
Макрос переносит разрыв перед последней страницей таким образом, чтобы последняя строка табличной части, предществующая блоку подписей, при печати располагалась на одной странице с блоком подписей.

- EXCEL-файл формируется с помощью ZWWW.
- Макрос вызывать в конце, т.е. создать имя диапазона, например "Я_МАКРОС", в качестве параметра должно передаваться количество строк в блоке подписей
- Также в коде макроса нужно указать, по какой колонке следует определять последнюю заполненную строку, переменная column_idx

Code:
Sub Separators_Shift(R As Range)
    '----------------------------------------------------------------------------
    'Макрос переносит разрыв перед последней страницей таким образом, чтобы
    'последняя строка, предществующая блоку подписей, при печати располагалась
    'на одной странице с блоком подписей
    '----------------------------------------------------------------------------
    'Макрос вызывать в конце, т.е. например создать имя диапазона "Я_МАКРОС"
    'В качестве параметра должно передаваться количество строк в блоке подписей
    '----------------------------------------------------------------------------
   
    Dim Сolumn_IDX As Long      'номер колонки, по которой будет определяться последняя заполненная строка
    Dim LastRow As Long         'последняя заполненная строка
    Dim T As Long               'строка над которой находится первый разрыв страницы
    Dim Podpis_Count As Long    'количество строк в блоке подписей
    Dim Shift_Counts As Double  'текущий сдвиг разрыва страницы в сантиметрах
   
    Podpis_Count = R.Value
    R.Value = ""
   
    column_idx = 2  'Определять последнюю заполненную строку будем по 2й колонке
   

    With ThisWorkbook.Sheets(1)
   
        LastRow = .Cells(.Rows.Count, column_idx).End(xlUp).Row  'Последняя заполненная строка
        ActiveWindow.View = xlPageBreakPreview                   'Переход в режим разметки страниц
       
        If .HPageBreaks.Count = 0 Then  'Выходим, если разделителей страниц нет (всего одна страница)
            ActiveWindow.View = xlNormalView  'Переход в обычный режим просмотра документа
            Exit Sub
        End If
       
        T = .HPageBreaks(.HPageBreaks.Count).Location.Row  'Определяем строку, над которой находится первый разрыв страницы

        Do While T + Podpis_Count > LastRow  'Пока последние podpis_count+1 строк не окажутся на одной странице
            Shift_Counts = Shift_Counts + 0.1    'Наращиваем сдвиг разрыва
            .PageSetup.BottomMargin = Application.CentimetersToPoints(Shift_Counts)  'Сдвигаем разрыв
            If .HPageBreaks.Count = 0 Then       'Выходим, если разделителей страниц больше нет
                ActiveWindow.View = xlNormalView  'Переход в обычный режим просмотра документа
                Exit Sub
            End If
            T = .HPageBreaks(.HPageBreaks.Count).Location.Row  'Определяем строку, над которой находится 1й разрыв страницы
        Loop

    End With
    ActiveWindow.View = xlNormalView  'Переход в обычный режим просмотра документа
End Sub


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Макрос VBA для скрепления блока подписей с последней строкой в EXCEL-файле
СообщениеДобавлено: Вт, июл 03 2012, 12:21 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Вообще то в ZWWW есть пример шаблона ZWWW_SAMPLE_INVOICE.xls, где на событие WorkBook_BeforePrint написан макрос для этих же целей.
Реализация через событие позволяет корректно сформировать неразрывные подписи и после ручного изменения формы.

Неразрывная область задается именованным выделением "ИтогиПодписи" в шаблоне.

p.s.
Макрос лежит на уровне "Эта книга", а не в Module, возможно поэтому не каждый его замечает.
Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean) 'Неразрывные подписи
  ActiveSheet.ResetAllPageBreaks
  Dim R As Range
  Set R = Range("ИтогиПодписи")
  Set R = R.Offset(-1, 0).Resize(R.Rows.Count + 1, R.Columns.Count)
  R.Rows.PageBreak = xlPageBreakNone
  For Each Rw In R.Rows
    If Rw.PageBreak = xlPageBreakAutomatic Then
      R.Rows.PageBreak = xlPageBreakManual
    End If
  Next
End Sub

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макрос VBA для скрепления блока подписей с последней строкой в EXCEL-файле
СообщениеДобавлено: Вт, июл 03 2012, 13:16 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, янв 14 2010, 13:26
Сообщения: 70
Откуда: Санкт-Петербург
Пол: Мужской
Ну тогда надо признать, что ваш макрос моднее моего ) Но я правда его в упор не видел)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB