Imprimați mai multe selecții pe o singură foaie folosind VBA în Microsoft Excel

Anonim

Dacă selectați mai multe intervale de celule pe o coală și încercați să imprimați celulele selectate, veți face
obțineți o foaie pentru fiecare dintre zonele selectate.
Următorul exemplu de macro va imprima toate zonele selectate pe o singură foaie,
cu excepția cazului în care zonele sunt prea mari pentru a se potrivi într-o singură foaie.

Sub PrintSelectedCells () 'imprimă celulele selectate, utilizați dintr-un buton din bara de instrumente sau dintr-un meniu 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 ( ) As Single Dim AWB As Workbook, NWB As Workbook If UCase (TypeName (ActiveSheet)) "WORKSHEET" Then Exit Sub 'utile only in worksheets aCount = Selection.Areas.Count If aCount = 0 Then Exit Sub' no cells selected cCount = Selection.Areas (1) .Cells.Count If aCount> 1 Then 'multiple areas selected Application.ScreenUpdating = False Application.StatusBar = "Tipărire" & aCount & "zone selectate …" Set 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 'găsiți înălțimea rândului fiecărui rând din selecție rHeight (i) = Rows (i) .RowHeight Next i For i = 1 To cCount 'găsiți lățimea coloanei fiecărei coloane din selecția cWidt h (i) = Coloane (i). ColumnWidth Next i Set NWB = Workbooks.Add 'create a new workbook For i = 1 To rCount' set rânduri înălțimi Rânduri (i) .RowHeight = rHeight (i) Next i Pentru i = 1 Pentru a cCount 'setați lățimile coloanei Coloane (i) .ColumnWidth = cWidth (i) Următorul i Pentru i = 1 Pentru aCount AWB.Activați aRange = Selecție.Areas (i). copierea intervalului NWB.Activate With Range (aRange) 'paste valori și formate .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 'închideți registrul de lucru temporar fără a salva Application.StatusBar = False AWB.Activate Set AWB = Nothing Set NWB = Nothing Altse Dacă cCount <10 Apoi 'selectate mai puțin de 10 celule Dacă MsgBox („Sunteți sigur că doriți să imprimați” & _ cCount & „a selectat celulele?”, _ VbQuestion + vbDaNu, „Imprima celule selectate”) = vbNu Th ro Exit Sub End If Selection.PrintOut End If End Sub