Ω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每张表的行数超过一百万行.
关于您的方法有几点需要注意:
Cells(2,1)
是A2.语法是Cells([row], [column])
Range("A65536").End(xlUp).Row
这会导致A1:L2的打印区域(一旦您将.Address添加到您的范围内).为何选择A1?因为列A是空的,因此lastrow是行1.您已将范围设置为A2:L1,它变为A1:L2.
您需要.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样式引用以字符串形式返回或设置要打印的范围。读/写字符串。