Мое первоначальное намерение состояло в том, чтобы напечатать все страницы, кроме последней, с заголовками печати (строки для повторения сверху), а затем распечатать последнюю страницу без заголовков печати. Похоже, что после обширных онлайн-исследований решение состоит в том, чтобы установить 2 задания на печать. Но во время тестирования во втором задании на печать начало последней страницы будет неправильным (т. Е. Некоторые строки будут напечатаны в обоих заданиях на печать), потому что после выключения заголовков печати Excel сбросит разрывы страниц и пересчитает число «нет». страниц.
Итак, мое решение состоит в том, чтобы найти «FirstRowOfLastPage» при включенной функции «Заголовки печати», распечатать первые (или первые несколько) страниц, затем отключить «Печать заголовков» и распечатать из «FirstRowOfLastPage». до конца страницы. Но почему-то задания на печать печатаются не так, как задумано.
Я новичок в VBA, поэтому я объединил коды из разных источников и предложил для тестирования следующее. (Коды для 2-го задания на печать не были включены, так как я столкнулся с непредвиденным результатом, основываясь на приведенном ниже, и я хочу, чтобы он был решен первым.)
Кстати, я использую Microsoft Excel 2010.
Public Enum ViewPointAction
SaveViewpoint = 1
RestoreViewpoint = 2
End Enum
Sub SelectRealLastCell()
Dim lRealLastRow As Long
Dim lRealLastColumn As Long
Range("A1").Select
On Error Resume Next
lRealLastRow = Cells.Find("*", Range("A1"), xlFormulas, , xlByRows, xlPrevious).Row
lRealLastColumn = Cells.Find("*", Range("A1"), xlFormulas, , xlByColumns, xlPrevious).Column
Cells(lRealLastRow, lRealLastColumn).Select
End Sub
Sub ManageUserViewpoint(Action As ViewPointAction)
Static SaveCurSelection As String
Static SaveActiveCell As String
Static SaveCurViewRow As Long
Static SaveCurViewCol As Integer
If Action = RestoreViewpoint Then
ActiveSheet.Range(SaveCurSelection).Select
ActiveSheet.Range(SaveActiveCell).Activate
ActiveWindow.ActivePane.ScrollRow = SaveCurViewRow
ActiveWindow.ActivePane.ScrollColumn = SaveCurViewCol
Else
SaveCurSelection = Selection.Address
SaveActiveCell = ActiveCell.Address
SaveCurViewRow = ActiveWindow.ActivePane.ScrollRow
SaveCurViewCol = ActiveWindow.ActivePane.ScrollColumn
End If
End Sub
Sub Print()
Dim GetFinalPageRowCount As Integer
Dim LastUsedRow As Long
Dim ScreenUpdatingFlag As Boolean
Dim FirstRowOfLastPage As Long
Dim AllUsedRange As Range
Dim RangeofLastPage As Range
ScreenUpdatingFlag = Application.ScreenUpdating
Application.ScreenUpdating = False
ManageUserViewpoint (SaveViewpoint)
Set AllUsedRange = Range(Cells(1, "A"), "LastCell")
ActiveSheet.PageSetup.PrintArea = AllUsedRange.Address
ActiveSheet.PageSetup.FitToPagesWide = 1
ActiveSheet.PageSetup.FitToPagesTall = False
SelectRealLastCell
ActiveWindow.ActivePane.ScrollRow = Selection.Row
LastUsedRow = ActiveCell.Row
FirstRowOfLastPage = ActiveSheet.HPageBreaks(ActiveSheet.HPageBreaks.Count).Location.Row
ManageUserViewpoint (RestoreViewpoint)
Application.ScreenUpdating = ScreenUpdatingFlag
GetFinalPageRowCount = LastUsedRow - FirstRowOfLastPage + 1
MsgBox "There are " & GetFinalPageRowCount & _
" rows on the last page, Page " & ActiveSheet.HPageBreaks.Count + 1
ActiveSheet.PrintOut From:=1, To:=ActiveSheet.HPageBreaks.Count 'to print the 1st or 1st few sheets
Set RangeofLastPage = Range(Cells(FirstRowOfLastPage, "A"), "LastCell")
ActiveSheet.PageSetup.PrintArea = RangeofLastPage.Address
ActiveWindow.View = xlPageBreakPreview
End Sub
В результате, когда мой файл имеет напечатанный заголовок в строке 1 и данные пронумерованы от 1 до 95 в строках со 2 по 96, получается:
, MsgBox корректно возвращает«На последней странице 28 строк, стр. 2»
файл распечатки состоит из 1 страницы, показывающей заголовок печати + данные, пронумерованные от 1 до 74
на экране предварительного просмотра разрыва страницы отображаются данные, пронумерованные от 68 до 95 внутри области печати.
Что не так с моим кодом?
Спасибо.