Excelmacros – dynamic设置打印区域

我有一个固定列数的表,但行数不同。

有没有我可以创build一个macros来自动设置该表的打印区域?

我将结合使用VBA方法dynamicresize的命名范围。

首先创build一个命名范围,MyNamedRange :(假设你的表以$ A $ 1开始,你的表有标题)

=OFFSET(A1,0,0,COUNTA(A:A)-1,COUNTA(1:1)) 

然后只需执行一行VBA:

 ActiveSheet.PageSetup.PrintArea = "MyNamedRange" 

只需使用这个简单的代码:

  Private Sub prnt() On Error Resume Next Cells(1, 1).Select With ActiveSheet.PageSetup .PrintArea = Range(ActiveCell, ActiveCell.SpecialCells(xlCellTypeLastCell)).Select.Address .Orientation = xlLandscape .LeftHeader = "&p/&N" .LeftFooter = ActiveWorkbook.FullName 'to show address .PrintTitleRows = "$1:$5" 'repeat at top .Zoom = False .Orientation = xlLandscape .FitToPagesWide = 1 'to print in 01 page .FitToPagesTall = False 'to print in 01 page End With End Sub 

如果您想要始终打印整个工作表,则实际上只需清除打印区域,并且将默认填充数据的工作表的数量。 如果你不想隐藏一些列,wtfsven的答案是完美的。

我想这是一个非常迟的回应……上述解决scheme在Excel 2007中不适用于我,所以我使用了

 begin_column = 1 end_column = 5 begin_row = 1 end_row = 30 'converting the numbers to uppercase letters temp_begin_column = Chr(first_column + 64) temp_end_column = Chr(second_column + 64) ActiveSheet.PageSetup.PrintArea = "$" & temp_begin_column & "$" & begin_row & ":$" & temp_end_column & "$" & end_row 

这可能看起来像一个复杂的解决scheme,但它是唯一可靠地为我工作的东西

我已经试过这个,它为我工作。

 StartColumn="A" StartRow=1 EndColumn="B" EndRow=10 ActiveSheet.PageSetup.PrintArea = StartColumn & StartRow & ":" & EndColumn & EndRow ActiveSheet.PageSetup.PrintArea = "A1:B10" Or ActiveSheet.PageSetup.PrintArea = "$" & StartColumn & "$" & StartRow & ":" & "$" & EndColumn & "$" & EndRow ActiveSheet.PageSetup.PrintArea = "$A$1:$B$10"