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