Excel 用于设置动态打印区域的vba代码

Excel 用于设置动态打印区域的vba代码,excel,vba,Excel,Vba,我试图找到vba代码来定义活动工作表的打印区域,该区域将包括所有行,但仅包括A到X列。每个活动工作表的行数都会发生变化。这是我的,但没用。给我一个运行时错误,并认为我正在尝试编写一个公式 Sub setprintarea() ' Sets Range from cell A1 for all rows thru column 24 (X) ActiveSheet.PageSetup.PrintArea = "$A$1:$X$" End Sub 任何帮助都将不胜感激 您有一个

我试图找到vba代码来定义活动工作表的打印区域,该区域将包括所有行,但仅包括A到X列。每个活动工作表的行数都会发生变化。这是我的,但没用。给我一个运行时错误,并认为我正在尝试编写一个公式

Sub setprintarea()
' Sets Range from cell A1 for all rows thru column 24 (X)
ActiveSheet.PageSetup.PrintArea = "$A$1:$X$"
End Sub

任何帮助都将不胜感激

您有一个小语法错误。要指定完整列,您需要指定
“$A:$X”
。这可能会给人留下这样的印象:您将打印A列到X列的全部内容。但是,情况并非如此。Excel将只打印包含内容的单元格所需的足够表格

例如,创建一个新的工作表。在工作表上,在A到C列的随机单元格中输入值。接下来,将打印区域设置为$A:$B。现在,进行打印预览。您将看到Excel足够聪明,只在数据存在的地方创建页面

更正代码:

ActiveSheet.PageSetup.PrintArea = "$A:$X"

确实,OP可能不希望范围扩展到图纸上的最后一行。也可能
X
不是图纸上最长的列,在这种情况下,您需要测试每列以确定图纸长度。希望这不会使问题过于复杂,但有时最后一列不是图纸长度

MaxLastRow = 1
For x = 1 To 24
    If ActiveSheet.Cells(Rows.Count, x).End(xlUp).Row > MaxLastRow Then
        MaxLastRow = ActiveSheet.Cells(Rows.Count, x).End(xlUp).Row
    End If
Next x

ActiveSheet.PageSetup.PrintArea = "$A$1:$X$" & MaxLastRow
动态打印区
Sub-setPrintArea()
使用ActiveSheet
.PageSetup.PrintArea=相交(.UsedRange、.Columns(“A:X”))。地址
'将地址写入即时窗口(CTRL+G)。
Debug.Print.PageSetup.PrintArea
以
端接头

@BigBen,我同意。这不应该是一个问题。例如,创建一个新的工作表。在工作表上,在A到C列的随机单元格中输入值。接下来,将打印区域设置为$A:$B。现在,进行打印预览。您将看到Excel足够聪明,只创建数据存在的页面。我在测试工作簿中的几个工作表上尝试了此选项,每个工作表都有不同的行数,似乎工作正常。我非常感谢所有其他选项,并将记住它们以备将来使用!