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

Ωme*_*ega 3 excel vba excel-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))
Run Code Online (Sandbox Code Playgroud)

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

设置打印区域应该是一个正确的宏?

Jon*_*ell 11

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

试试这个:

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
Run Code Online (Sandbox Code Playgroud)

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

lastRow = ws.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Run Code Online (Sandbox Code Playgroud)

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

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

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

这会导致A1:L2的打印区域(一旦您将.Address添加到您的范围内).为何选择A1?因为列A是空的,因此lastrow是行1.您已将范围设置为A2:L1,它变为A1:L2.


And*_*y G 5

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

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

PageSetup.PrintArea属性

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