动态打印区域的VBA代码,其中行= 10 +“ $ G $ 10”

时间:2018-06-23 14:24:38

标签: excel vba dynamic printing range

我需要vba代码来设置Customer Receipt工作表的打印区域以包括A列到H列,从$ A $ 4开始,向下延伸到等于10 + $ G $ 10的值的行数。例如,如果$ G $ 10中的值为16,则结果打印区域为$ A $ 4:$ H $ 26。我尝试在名称管理器中使用公式,所有这些公式都导致打印整个工作表,就像没有设置打印区域一样(标准的“设置打印区域”起作用,但不是我需要的)。仅供参考,我已经为该工作表准备了以下宏:

Sub PrintCustomerReceipt()
' PrintCustomerReceipt Macro
' Macro to print 2 copies of Customer Receipt on designated printer
' Keyboard Shortcut: Ctrl+Shift+Q

    ActiveWindow.SelectedSheets.PrintOut Copies:=2, Collate:=True, _
        IgnorePrintAreas:=False
End Sub

1 个答案:

答案 0 :(得分:0)

您的问题有点不清楚;我认为您使一个简单的任务过于复杂。根据前两个句子中的示例,这是您需要的行:

ActiveSheet.PageSetup.PrintArea = "$A$4:$H$" & (10 + Range("G10"))

当我需要按原样或修改后运行内置任务时(在这种情况下为Set Print Area),我让Excel为我“编写代码的初稿”:

  1. 开发人员菜单> 记录宏> 记下宏名称(可能是Macro1)> 确定
  2. 选择(突出显示)单元格 $A$4:$H$26
  3. 页面布局菜单> 打印区域> 设置打印区域
  4. 开发人员菜单> 停止记录>
  5. 单击步骤1中的宏名称> 编辑

在生成的VBA中,我们仅看到一条重要的行:

ActiveSheet.PageSetup.PrintArea = "$A$4:$H$26"

所以现在我们要做的就是将那条线移到您需要的过程中,并进行一些小的修改:

ActiveSheet.PageSetup.PrintArea = "$A$4:$H$" & (10 + Range("G10"))

每次执行此行时,都会根据G10中的值“动态”设置工作表的打印区域。

要打印,只需将标准打印命令与默认选项一起使用,或者如果您需要2份:

ActiveWindow.SelectedSheets.PrintOut Copies:=2

(不要“忽略打印区域”。)


现在在一起:

Sub PrintCustomerReceipt() 
    ActiveSheet.PageSetup.PrintArea = "$A$4:$H$" & (10 + Range("G10"))
    ActiveWindow.SelectedSheets.PrintOut Copies:=2
End Sub