VBA - 按指定顺序从一个 sheet 打印多个命名范围

VBA - Print multiple named ranges from one sheet in specified order

我有一些 vba 看起来像这样:

Sub Print_Info()

Worksheets("Scorecard (Monthly)").Activate
ActiveSheet.PageSetup.PrintArea = "P1,P2,P3,P4,P5"
ActiveWindow.SelectedSheets.PrintOut Preview:=Preview

End Sub

P1、P2 等都是在同一作品上的命名范围sheet(记分卡月刊)。当 运行 和 vba 时,结果打印输出的顺序不正确(如 VBA 中指定的)——我认为这是因为实际上 P1 和 P2 低于 P3, P4 和 P5 在工作sheet。使用vba时打印的页面顺序是:P4,P1,P2,P5,P3。 sheet 中的页面顺序是 P3、P4、P5、P1、P2 - 因此在使用 VBA 时打印顺序对我来说根本没有任何意义。需要这个的原因是它是一份月度报告,但我被要求定期为不同的受众以稍微不同的顺序提供一部分信息——所以只使用一些 VBA 在不触及实际工作的情况下重新排序打印输出 sheet 因为它可以正常使用。

有没有一种方法可以强制 excel 从一个 sheet 中以正确的顺序打印出一个文件中的范围?我知道我可以做这样的事情:

Sub Print_GSCB_Info()

Worksheets("Scorecard (Monthly)").Activate
ActiveSheet.PageSetup.PrintArea = "GSCB_P1"
ActiveWindow.SelectedSheets.PrintOut Preview:=Preview
ActiveSheet.PageSetup.PrintArea = "GSCB_P2"
ActiveWindow.SelectedSheets.PrintOut Preview:=Preview
ActiveSheet.PageSetup.PrintArea = "GSCB_P3"
ActiveWindow.SelectedSheets.PrintOut Preview:=Preview

End Sub

但是,这将导致单独的 'files' 被发送到打印机(这并不理想,因为页码不跟随等)。

有没有直接改变打印顺序的方法我就不好说了。但是只要您想打印月度报告,就可以使用 VBA 执行此解决方法:

  1. 新建 sheet
  2. 将范围 (P1-P5) 按正确顺序放入此 sheet
  3. 打印 sheet
  4. 删除sheet

此解决方案的优点:原始模板和打印文档可以有两种不同的布局

好的,所以在 Google 上进行了更多搜索后,我找到了这个 post,它显示了一个稍微不同的方法。使用以下 VBA 效果很好,但仍然不确定为什么我之前的尝试不起作用!

Sub Print_Info_v1()

Worksheets("Scorecard (Monthly)").Activate

ActiveSheet.Range("P1,P2,P3,P4,P5").PrintOut

End Sub