使用宏在Excel 2013中设置打印区域

时间:2013-07-12 20:23:51

标签: excel excel-vba vba

在Excel 2013中,具有名为“Tags”的工作表,我正在尝试设置打印区域A2到页面结尾,以列结尾L

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

我的代码编译好了,但似乎没有用 - 没有设置打印区域。

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

2 个答案:

答案 0 :(得分:10)

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

试试这个:

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值已经过时(尽管它经常可以使用),Excel 2007每张表的行数超过一百万。

有关您的方法的一些注意事项:

  1. Cells(2,1)是A2。语法为Cells([row], [column])
  2. 您想要列L中的最后一个填充行,但是要查找列A. Range("A65536").End(xlUp).Row
  3. 这会导致A1:L2的打印区域(一旦您将.Address添加到您的范围内)。为何选择A1?因为列A是空的,因此lastrow是第1行。您已将范围设置为A2:L1,它变为A1:L2。

答案 1 :(得分:4)

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

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

PageSetup.PrintArea Property

  

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