Excel 2010 VBA не печатается правильно (1 лист 2 задания на печать) - PullRequest
0 голосов
/ 09 октября 2019

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

Что не так с моим кодом?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...