Создание листа печати
Теперь, когда некоторая предварительная работа проделана, займемся основной работой по подготовке листа печати. Замечу, что, конечно, нажав кнопки OLE- и Fon-, можно приступить к печати листа, в таком виде, как он получился. После чего, нажать кнопки OLE+ и Fon+, вернув лист в исходное состояние. Однако это не лучший способ, поскольку остались кой-какие лишние детали, а главное при выключении была потеряна важная информация. Поскольку окончательное формирование листа печати является необратимой операцией, не позволяющей вернуться к исходному состоянию, то лучшим выходом является формирование дополнительного листа, специально предназначенного для печати.
Пятая кнопка на инструментальной панели с именем "КопияП" запускает макрос, готовящий лист печати. Приведу его текст:
Public Sub CopyForPrinting() 'подготавливает копию листа для печати Dim mySh As Worksheet Dim Ex As Boolean Dim curField As Range With ThisWorkbook Ex = False For Each mySh In .Worksheets If mySh.Name = "ЛистПечати" Then Ex = True: Exit For End If Next mySh If Not Ex Then .Worksheets.Add .ActiveSheet.Name = "ЛистПечати" .ActiveSheet.Move After:=Sheets("Заказ") End If 'Очистить область листа печати Set curField = .Worksheets("ЛистПечати").Range("A1:K56") curField.Clear 'Показ скрытых строк StrShow 'Копирование листа Set curField = .Worksheets("Заказ").Range("A1:K56") curField.Copy .Sheets("ЛистПечати").Activate .ActiveSheet.Range("A1").Select .ActiveSheet.PasteSpecial End With 'запуск макросов OleMinus FonMinus 'Скрыть лишние строки StrHide 'Дополнить нужной информацией AddInformation 'Удалить сетку и другие детали With ActiveWindow .DisplayGridlines = False 'сетка .DisplayHeadings = False 'заголовки .DisplayFormulas = False 'показ формул .DisplayZeros = False 'отображение нулей End With
End Sub
В работе процедуры можно выделить несколько этапов:
- Вначале создается лист печати, если только он уже не был создан.
- Область листа, отведенная под документ, чистится от предыдущего заполнения. Вызываемая процедура StrShow показывает строки, которые были скрыты при предыдущем заполнении. О скрытии строк я поговорю чуть позже.
- Затем лист заказа копируется со всеми его атрибутами.
- Теперь, когда у нас есть копия листа, над ней можно проводить все необходимые операции. Первым делом запускаются макросы OleMinus и FonMinus, удаляющие объекты OLE и Shape, также как и заливку фона.
- На следующем этапе лист печати сжимается в размерах. Достигается это за счет того, что ряд пустых строк скрываются, - делаются невидимыми. Такими строками являются строки, разделяющие разделы нашего документа, а также незаполненные строки таблицы заказов. Выполняет операцию скрытия строк процедура StrHide. Поскольку эта операция обратима, то я написал и процедуру StrShow, показывающую скрытые строки. Она вызывается при чистке листа.
- Вызов процедуры AddInformation позволяет дополнить лист печати необходимой информацией. В соответствующие ячейки листа печати заносятся название издательства, фамилия сотрудника, оформляющего заказ, дата заказа.
- На последнем шаге работы процедуры удаляются ненужные при печати элементы листа - сетка, заголовки строк и столбцов.
Приведу теперь тексты процедур StrHide и StrShow:
Public Sub StrHide() 'Эта процедура позволяет скрыть лишние строки Dim curField As Range, curField1 As Range Dim i As Integer Rows("1:7").Select Selection.EntireRow.Hidden = True Rows("10:14").Select Selection.EntireRow.Hidden = True Rows("17:18").Select Selection.EntireRow.Hidden = True Rows("27:28").Select Selection.EntireRow.Hidden = True Rows("48:49").Select Selection.EntireRow.Hidden = True
'Скрыть пустые строки в таблице заказов Set curField = Range("A34:D34") Set curField1 = Rows("34:34") For i = 0 To 11 If IsEmpty(curField.Offset(i)) Then curField1.Offset(i).Select Selection.EntireRow.Hidden = True End If Next i End Sub
В процедуре StrHide скрываются строки, не несущие информацию. При скрытии строк внутри таблицы заказа приходится проводить анализ того, заполнена ли строка таблицы информацией.
Процедура StrShow, показывающая скрытые строки, намного проще, поскольку достаточно указать весь требуемый диапазон строк и показать все строки, которые, возможно, были скрыты. Вот текст этой простой процедуры:
Public Sub StrShow() 'Показ скрытых строк Rows("1:56").Select Selection.EntireRow.Hidden = False End Sub
Для полноты картины осталось привести процедуру AddInformation, добавляющую информацию в ячейки листа печати. Вот ее текст:
Public Sub AddInformation() 'Эта процедура дополняет лист печати нужной информацией Dim MyCombo As Object With ThisWorkbook Set curField = .Worksheets("ЛистПечати").Range("D8") curField.Value = "Издательство: Родная Речь" curField.Font.Bold = True curField.Font.Size = 12 Set curField = .Worksheets("ЛистПечати").Range("H16") curField.Value = Date curField.Font.Bold = True curField.Font.Size = 14 Set curField = .Worksheets("ЛистПечати").Range("H29") Set MyCombo = .Worksheets("Заказ").OLEObjects("ListOfTeam").Object curField.Value = MyCombo.Text curField.Font.Bold = True curField.Font.Size = 12 End With End Sub
В завершение рассказа о подготовке листа печати давайте взглянем на то, что получается при нажатии кнопки "КопияП", ответственной за выполнение этой работы:
Рис. 7.13. Лист печати
На этом и закончу обсуждение того, как придать интерактивность офисным документам.
В завершение рассказа о подготовке листа печати давайте взглянем на то, что получается при нажатии кнопки "КопияП", ответственной за выполнение этой работы:
Рис. 7.13. Лист печати
На этом и закончу обсуждение того, как придать интерактивность офисным документам.
© 2003-2007 INTUIT.ru. Все права защищены. |