2016-11-26 110 views
0

我想弄清楚如何打印「ActiveSheet」或Sheet1與「Sheet5」(行1-6,A:M)一起顯示在底部的2行Sheet1結束和Sheet5數據開始之間的空間。我一直試圖查找類似的問題,並閱讀關於「聯盟」的內容,但我不確定它會如何適合這裏。從多個工作表結合打印範圍VBA EXCEL

Private Sub CommandButton1_Click() 
Dim Sel_Manager As String 
'Headers repeated at the top 
Application.PrintCommunication = False 
With ActiveSheet.PageSetup 
     .PrintTitleRows = "$2:$2" 
     .PrintTitleColumns = "$B:$M" 
     .Orientation = xlLandscape 
     .Zoom = False 
     .FitToPagesWide = 1 
     .FitToPagesTall = 1 
End With 

'Manager selection through ComboBox dropdown 
Sel_Manager = ComboBox1 
'Inserting autofilters for worksheet 
Cells.Select 
Selection.AutoFilter 
'Manager defined in the dropdown ComboBox 
ActiveSheet.Range("B2", Range("M2").End(xlDown)).AutoFilter Field:=1, Criteria1:=Sel_Manager 
ActiveSheet.Range("B2", Range("M2").End(xlDown)).AutoFilter Field:=2, Criteria1:="A" 
'Here I select range to be printed and specify manager in filename 
ActiveSheet.Range("B2", Range("M2").End(xlDown)).Select 

Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
Sel_Manager + ".pdf", Quality:=xlQualityStandard, _ 
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True 

ActiveSheet.ShowAllData 
Application.PrintCommunication = True 
End Sub 
+1

'設置Rng3 =聯合(Rng1,Rng2)'將創建包含Rng1和Rng2的組合範圍。 Rng1和Rng2不必是連續的,但它們必須位於同一工作表內。所以'聯合'不會幫助打印兩個工作表的位。您必須創建一個新的臨時工作表並從Sheet1和Sheet5複製所需的數據,打印臨時工作表,然後刪除臨時工作表。 –

+0

如果我將參考單元粘貼到Rng1底部的Rng2,是否可以將Rng2設置爲動態命名範圍?它需要是動態的,因爲用戶可以將行添加到Rng1中,這會將底部的Rng2參考向下移動。我嘗試使用命名的範圍,但它鎖定範圍內的任何行你先設置它,並不會調整時插入行。 –

+0

我不完全理解你的問題。用戶如何在宏運行時添加更多的行?一個「聯盟」可以結合多達30個範圍:「聯盟(Rng1,Rng2,...,Rng30)」。 「聯盟」是一種智能功能;如果兩個範圍是連續的,它將合併它們。你可以在用'Union'創建的範圍上使用'Union'。 Set Rng1 = Union(Rng2,Rng3)''Set Rng1 = Union(Rng1,Rng4)'是有效的。 –

回答

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 
+0

謝謝!我會試試這個。 –

相關問題