如果您声明一些变量并分解您的语句,则更容易看到正在发生的事情。
试试这个:
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 值已过时(尽管它通常仍然有效),每张纸有超过一百万行。
关于您的方法需要注意的几点:
Cells(2,1)
是A2。语法是Cells([row], [column])
- 您想要 L 列中的最后一个填充行,但正在查看 A 列。
Range("A65536").End(xlUp).Row
这会产生 A1:L2 的打印区域(一旦您将 .Address 添加到您的范围)。为什么选择 A1?因为 A 列是空的,因此最后一行是第 1 行。您已将范围设置为 A2:L1,它变为 A1:L2。