Microsoft Excel'de VBA kullanarak birden çok seçimi tek bir sayfada yazdırın

Anonim

Bir sayfada birden fazla hücre aralığı seçerseniz ve seçilen hücreleri yazdırmaya çalışırsanız,
seçilen alanların her biri için bir sayfa alın.
Aşağıdaki örnek makro, seçili tüm alanları tek bir sayfaya yazdıracaktır,
alanların tek bir sayfaya sığmayacak kadar büyük olması dışında.

Sub PrintSelectedCells() ' seçili hücreleri yazdırır, bir araç çubuğu düğmesinden veya bir menüden kullanır Dim aCount As Integer, cCount As Integer, rCount As Integer Dim i As Integer, j As Long, aRange As String Dim rHeight() As Single, cWidth( ) Tek Dim AWB Çalışma Kitabı Olarak, NWB Çalışma Kitabı Olarak Eğer UCase(TypeName(ActiveSheet)) "WORKSHEET" ise Exit Sub ' sadece çalışma sayfalarında kullanışlıdır aCount = Selection.Areas.Count aCount = 0 ise Exit Sub ' hücre seçilmedi cCount = Selection.Areas(1).Cells.Count aCount > 1 ise ' birden fazla alan seçildi Application.ScreenUpdating = False Application.StatusBar = "Printing" & aCount & "seçili alanlar… " AWB = ActiveWorkbook rCount = ActiveSheet.Cells.SpecialCells (xlLastCell).Row cCount = ActiveSheet.Cells.SpecialCells(xlLastCell).Column ReDim rHeight(rCount) ReDim cWidth(cCount) For i = 1 To rCount ' için rHeight(i) = Rows seçimindeki her satırın satır yüksekliğini bulun (i).RowHeight Sonraki i For i = 1 için cCount ' cWidt seçimindeki her sütunun sütun genişliğini bulun h(i) = Columns(i).ColumnWidth Sonraki i NWB = Workbooks.Add ' yeni bir çalışma kitabı oluştur i = 1 için rCount ' satır yüksekliklerini ayarlayın Rows(i).RowHeight = rHeight(i) Sonraki i For i = 1 Saymak için ' sütun genişliklerini ayarlayın Columns(i).ColumnWidth = cWidth(i) Sonraki i For i = 1 aCount AWB.Activate aRange = Selection.Areas(i).Address ' aralık adresi Range(aRange).Copy ' aralığı kopyalama NWB.Activate With Range(aRange) ' değerleri ve biçimleri yapıştırır .PasteSpecial Paste:=xlValues, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False .PasteSpecial Paste:=xlFormats, Operation:=xlNone _ SkipBlanks:=False, Transpose:=False End with Application.CutCopyMode = False Next i NWB.PrintOut NWB.Close False ' Application.StatusBar = False AWB.Activate Set AWB = Nothing Set NWB = Nothing Else Eğer cCount < 10 O zaman ' 10'dan az hücre seçilirse If MsgBox(" & _ cCount & " seçili hücreleri yazdırmak istediğinizden emin misiniz ?", _ vbQuestion + vbYesNo, "Seçilen hücreleri yazdır") = vbNo Th tr Exit Sub End If Selection.PrintOut End If End Sub