【问题标题】:Set printing area In Excel 2013 using macro在 Excel 2013 中使用宏设置打印区域
【发布时间】:2013-07-12 20:23:51
【问题描述】:

在 Excel 2013 中,有一个名为 "Tags" 的工作表,我正在尝试设置打印区域,从 A2 到页面末尾,以列 @987654322 结尾@。

Worksheets("Tags").PageSetup.PrintArea = Worksheets("Tags").Range( _
  Cells(2, 1), Cells(Worksheets("Tags").Range("A65536").End(xlUp).Row, 12))

我的代码编译正常,但似乎不起作用 - 没有设置打印区域。

设置打印区域的正确宏应该是什么?

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    如果您声明一些变量并分解您的语句,则更容易看到发生了什么。

    试试这个:

    Sub SetPrintArea()
      Dim ws As Worksheet
      Dim lastRow As Long
    
      Set ws = ThisWorkbook.Sheets("Tags")
    
      ' find the last row with formatting, to be included in print range
      lastRow = ws.UsedRange.SpecialCells(xlCellTypeLastCell).Row
    
      ws.PageSetup.PrintArea = ws.Range("A2:L" & lastRow).Address
    End Sub
    

    或者,如果你想找到带有数据的 lastRow,你可以像这样找到 lastrow:

    lastRow = ws.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    

    请注意,从 Excel 2007 开始,您用作查找最后一行的起点的 65536 值已过时(尽管它经常仍然有效),每张纸有超过一百万行。

    关于您的方法需要注意的几点:

    1. Cells(2,1) 是 A2。语法是Cells([row], [column])
    2. 您希望 L 列中的最后一个填充行,但正在 A 列中查找。 Range("A65536").End(xlUp).Row

    这会产生一个 A1:L2 的打印区域(一旦您将 .Address 添加到您的范围)。为什么选择 A1?因为 A 列是空的,因此最后一行是第 1 行。您已将范围设置为 A2:L1,即变为 A1:L2。

    【讨论】:

    • 我在回答中添加了一个解释,解释了为什么您指定的范围导致打印区域为 A1:L2。
    • 澄清我的问题 - 我希望选择直到最后一行,无论列如何,所以即使 L 为空/空白。
    • 明白了。我已经编辑了我的答案,以便无论列如何都能正确找到最后一行。
    • 我编辑了答案以找到 usedrange 中的最后一行。请注意,如果 usedrange 不是从第一行开始,您需要通过将工作表顶部的空白行添加到 usedrange.rows.count 来设置最后一行。
    • @HeadofCatering 很高兴你提到了这一点,很多人都不知道。我想Range("A1", Cells.SpecialCells(xlCellTypeLastCell)) 是另一种选择。
    【解决方案2】:

    您需要在代码末尾添加.Address

        Worksheets("Tags").PageSetup.PrintArea = Worksheets("Tags").Range( _
            Cells(2, 1), Cells(Worksheets("Tags").Range("A65536").End(xlUp).Row, 12)).Address
    

    PageSetup.PrintArea 属性

    返回或设置要打印的范围,使用宏语言中的 A1 样式引用作为字符串。读/写字符串。

    【讨论】:

    • 无论内容如何,​​它都会返回$A$1:$L$2。为什么是$A$1,为什么是$L$2..?
    • 这是其中的一部分,但 OP 也指定了错误的范围。他希望 B2 成为打印区域的开始,但指定 Cells(2,1),即 A2。
    • 这个有效:Worksheets("Tags").PageSetup.PrintArea = Worksheets("Tags").Range(Cells(2, 1), Cells(Worksheets("Tags").UsedRange.Rows.Count, 12)).Address
    • 感谢@HeadofCatering 我没有接听 (2,1)。我还假设 OP 正在使用 A 列,因为它已被填充。
    • 事实证明 A2 毕竟是正确的起点。 B2 是一个错字。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 2016-01-03
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多