在Excel 2013中,具有名为“Tags”的工作表,我正在尝试设置打印区域从A2
到页面结尾,以列结尾L
。
Worksheets("Tags").PageSetup.PrintArea = Worksheets("Tags").Range( _
Cells(2, 1), Cells(Worksheets("Tags").Range("A65536").End(xlUp).Row, 12))
我的代码编译好了,但似乎没有用 - 没有设置打印区域。
设置打印区域的正确宏应该是什么?
答案 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每张表的行数超过一百万。
有关您的方法的一些注意事项:
Cells(2,1)
是A2。语法为Cells([row], [column])
Range("A65536").End(xlUp).Row
这会导致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样式引用作为字符串。读/写字符串。