【问题标题】:VBA Excel: change Page Break according to number of rows and last row positionVBA Excel:根据行数和最后一行位置更改分页符
【发布时间】:2016-01-31 00:09:53
【问题描述】:

我制作了一个由几张纸组成的工作簿。通过使用 VBA,我在 sheet1 上读取了不同数量的行,并将它们复制到最后一张,就像某种自定义报告一样。在大多数情况下,最后一张纸在打印过程中只有一页,但有时 VBA 例行复制具有大量数据的行,排列成两行或多行文本,因此此类报告的最后一行(其中应是符号、日期、地点等) .) 在第 2 页上出现意外!如果我以只有第 1 页可打印的方式进行分页,那么我的报告会丢失这些详细信息;在第二种情况下,如果我将分页符设置为 2 页(并且页面上只有几行数据),那么打印过程将产生 2 页的打印:一个充满数据,第二个是空的! 有没有办法用数据检测最后一行的位置,然后根据检测结果从VBA更改打印区域,只打印第1页或第1页和第2页!?我尝试使用行号,但有些行的高度是其他行的两倍,所以我放弃了! 谢谢。

【问题讨论】:

    标签: excel vba break


    【解决方案1】:

    与此同时,我认为我找到了简单有效的解决方案 (Excel 2010):

    LastRow3 = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    MsgBox "Last row filled with data is " & LastRow3" 
    'detect how many pages is in this sheet
    ActiveWorkbook.Sheets(1).Range("A1").Select
    tnp= (ActiveSheet.HPageBreaks.Count + 1) * (ActiveSheet.VPageBreaks.Count + 1)
    pagnr = "Total number of pages is:" & tnp
    MsgBox pagnr
    

    之后,基于 tnp 变量的值可能很容易设置分页符:

    ActiveSheet.PageSetup.PrintArea = "$A$1:$E$80"  ' takes in account Page1 and Page2
    

    ActiveSheet.PageSetup.PrintArea = "$A$1:$E$50" 'only one page is for printing
    

    谁有更好的解决方案!?谢谢。

    【讨论】:

    • 我根本无法推测 Sheet 需要多长时间并使用 VBA 代码设置 PageBreak。当所有行具有相同的高度时会很容易,但是如果其中一些具有不同的高度,那么我无法计算第 50 行会在第 1 页还是第 2 页中,,尝试了所有方法但无法获得好的解决方案。请帮忙。
    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    相关资源
    最近更新 更多