VBA - 按指定顺序从一个工作表中打印多个命名范围

时间:2016-10-13 17:25:49

标签: excel vba excel-vba printing named-ranges

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

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = @"(#[^#]+#)";
      Regex rgx = new Regex(pattern);
      string sentence = "#blah blah# asdfasdfaf #somethingelse#";

      foreach (Match match in rgx.Matches(sentence))
     Console.WriteLine("Found '{0}' at position {1}", 
               match.Value, match.Index);
   }
}

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

有没有办法可以强制excel从一张纸上以正确的顺序在一个文件中打印出范围?我知道我可以这样做:

Sub Print_Info()

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

End Sub

但是,这会导致将单独的“文件”发送到打印机(这不是理想的,因为页码不会跟随等)。

2 个答案:

答案 0 :(得分:1)

好的,所以在Google上搜索了一下之后,我发现了post,这显示了一种略有不同的方法。使用以下VBA可以很好地工作,但仍然不确定为什么我之前的尝试不起作用!

Sub Print_Info_v1()

Worksheets("Scorecard (Monthly)").Activate

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

End Sub

答案 1 :(得分:0)

我无法告诉您是否有办法直接更改打印顺序。但是,只要您想打印月度报告,就可以使用VBA执行此解决方法:

  1. 制作新表
  2. 将范围(P1-P5)按正确顺序放入此表
  3. 打印表格
  4. 删除工作表
  5. 此解决方案的优点:您可以为原始模板和打印文档提供两种不同的布局