结合多个工作表VBA EXCEL中的打印范围

时间:2016-11-26 15:31:16

标签: excel vba excel-vba printing

我试图弄清楚如何打印“ActiveSheet”或Sheet1以及“Sheet5”(第1-6行,A:M)显示在底部,在Sheet1的末尾之间有2行空格Sheet5的数据开头。我一直在努力查找类似的问题并阅读有关“联盟”的内容,但我不确定它是如何适合的。

{{1}}

1 个答案:

答案 0 :(得分:0)

这可能会给你一些想法。

我创建了两个工作表。其中一个名为“Main”,包含在B列中有“名称”而在C列中有一些As的数据。另一个名为“Extra”的数据包含显示在过滤数据底部的六行。

引用工作表时,我不使用Excel的标识符。第一张工作表的标识符为Sheet1,名称为“Sheet1”。如果您立即创建另一个工作表,它将具有Sheet2的标识符和名称“Sheet2”。但是,如果在创建第二个工作表之前重命名Sheet1,则它将具有Sheet2的标识符和名称“Sheet1”。这一切都变得非常混乱。

我已将所选经理硬编码为“Aaaaa”,而不是将其设为用户输入的参数。我已准备好工作表“Main”进行打印但尚未输出。

Option Explicit
Sub Test()

  Dim Manager As String
  Dim RngFiltered As Range
  Dim RowSht1Last As Long

  Manager = "Aaaaa"

  With Worksheets("Main")

    .AutoFilterMode = False   ' Switch off auto filtering if on

    ' Find last row containing a value
    RowSht1Last = .Cells.Find("*", .Range("A1"), xlFormulas, , xlByRows, xlPrevious).Row

    With .Range("B2:M2")
      .AutoFilter Field:=1, Criteria1:=Manager
      .AutoFilter Field:=2, Criteria1:="A"
    End With

    Set RngFiltered = .Cells.SpecialCells(xlCellTypeVisible)

    ' Just to show the filtered range.  Note, I cannot find a documented limit
    ' on the number of sub-ranges within a range. If there is a limit, I have
    ' never managed to reach it. However Range.Address has a limit which is a
    ' little under 255.
    Debug.Print Replace(RngFiltered.Address, "$", "")

    Worksheets("Extra").Range("A1:M6").Copy Destination:=.Cells(RowSht1Last + 2, "A")

    ' ###### Output visible rows

    ' Delete rows copied from Sheet5
    .Rows(RowSht1Last + 2 & ":" & RowSht1Last + 8).Delete

  End With

End Sub