3

在 Excel 2013 中,有名为"Tags"的工作表,我试图设置一个从页面到末尾的打印区域,以 column 结尾。A2L

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

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

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

4

2 回答 2

12

如果您声明一些变量并分解您的语句,则更容易看到正在发生的事情。

试试这个:

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。

于 2013-07-12T20:35:54.093 回答
5

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

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

PageSetup.PrintArea 属性

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

于 2013-07-12T20:36:04.343 回答