Imprima várias seleções em uma folha usando VBA no Microsoft Excel

Anonim

Se você selecionar vários intervalos de células em uma planilha e tentar imprimir as células selecionadas, você
obtenha uma folha para cada uma das áreas selecionadas.
O exemplo de macro a seguir imprimirá todas as áreas selecionadas em uma folha,
exceto se as áreas forem muito grandes para caber em uma folha.

Sub PrintSelectedCells () 'imprime as células selecionadas, use a partir de um botão da barra de ferramentas ou de um menu 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 ( ) Como único Dim AWB como pasta de trabalho, NWB como pasta de trabalho If UCase (TypeName (ActiveSheet)) "WORKSHEET" Then Exit Sub 'útil apenas em planilhas aCount = Selection.Areas.Count If aCount = 0 Then Exit Sub' sem células selecionadas cCount = Selection.Areas (1) .Cells.Count If aCount> 1 Then 'múltiplas áreas selecionadas Application.ScreenUpdating = False Application.StatusBar = "Imprimindo" & aCount & "áreas selecionadas…" Definir 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 'encontre a altura de cada linha na seleção rHeight (i) = Rows (i) .RowHeight Next i For i = 1 To cCount 'encontre a largura da coluna de cada coluna na seleção cWidt h (i) = Colunas (i) .ColumnWidth Next i Set NWB = Workbooks.Add 'criar uma nova pasta de trabalho Para i = 1 Para rCount' definir alturas de linha Linhas (i) .RowHeight = rHeight (i) Next i For i = 1 Para cCount 'definir larguras de coluna Columns (i) .ColumnWidth = cWidth (i) Next i For i = 1 Para aCount AWB.Activate aRange = Selection.Areas (i) .Address' the range address Range (aRange) .Copy ' copiando o intervalo NWB.Activate With Range (aRange) 'cola valores e formatos .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 'feche a pasta de trabalho temporária sem salvar Application.StatusBar = False AWB.Activate Set AWB = Nothing Set NWB = Nothing Else If cCount <10 Then 'menos de 10 células selecionadas If MsgBox ("Tem certeza que deseja imprimir" & _ cCount & "células selecionadas?", _ VbQuestion + vbYesNo, "Imprimir células selecionadas") = vbNo Th pt Sair Sub End If Selection.PrintOut End If End Sub