【问题标题】:Setting a dynamic print area设置动态打印区域
【发布时间】:2021-06-08 20:38:59
【问题描述】:

我正在尝试为活动工作表定义打印区域,该工作表将包括 A 到 X 列中的所有行。

行数随每个活动工作表而变化。

这给了我一个运行时错误,并认为我正在尝试编写公式。

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

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您有一个小语法错误。要指定完整的列,您需要指定"$A:$X"。这可能会给人一种印象,即您将打印整个 A 到 X 列。但是,事实并非如此。 Excel 将只打印包含内容的单元格所需的足够工作表。

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

    更正的代码:

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

    【讨论】:

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

    确实,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
    

    【讨论】:

      【解决方案3】:

      动态打印区域

      Sub setPrintArea()
          With ActiveSheet
              .PageSetup.PrintArea = Intersect(.UsedRange, .Columns("A:X")).Address
              ' Write the address to the Immediate window (CTRL+G).
              Debug.Print .PageSetup.PrintArea
          End With
      End Sub
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-05
        • 1970-01-01
        • 2023-01-19
        相关资源
        最近更新 更多