Stampa più selezioni su un foglio utilizzando VBA in Microsoft Excel

Anonim

Se selezioni più intervalli di celle su un foglio e provi a stampare le celle selezionate, lo farai
ottenere un foglio per ciascuna delle aree selezionate.
La seguente macro di esempio stamperà tutte le aree selezionate su un foglio,
tranne se le aree sono troppo grandi per stare in un foglio.

Sub PrintSelectedCells() ' stampa le celle selezionate, utilizza da un pulsante della barra degli strumenti o da un 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( ) As Single Dim AWB As Workbook, NWB As Workbook If UCase(TypeName(ActiveSheet)) "WORKSHEET" Then Exit Sub ' utile solo nei fogli di lavoro aCount = Selection.Areas.Count If aCount = 0 Quindi Exit Sub ' nessuna cella selezionata cCount = Selection.Areas(1).Cells.Count If aCount > 1 Allora ' più aree selezionate Application.ScreenUpdating = False Application.StatusBar = "Stampa " & aCount & " aree selezionate… " Imposta 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 'trova l'altezza di ogni riga nella selezione rHeight(i) = Rows (i).RowHeight Next i For i = 1 To cCount ' trova la larghezza della colonna di ogni colonna nella selezione cWidt h(i) = Columns(i).ColumnWidth Next i Set NWB = Workbooks.Add ' crea una nuova cartella di lavoro For i = 1 To rCount ' imposta l'altezza delle righe Rows(i).RowHeight = rHeight(i) Next i For i = 1 A cCount ' imposta le larghezze delle colonne Columns(i).ColumnWidth = cWidth(i) Next i For i = 1 To aCount AWB.Activate aRange = Selection.Areas(i).Address ' l'indirizzo dell'intervallo Range(aRange).Copy ' copiando l'intervallo NWB.Activate With Range(aRange) ' incolla valori e formati .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 ' chiude la cartella di lavoro temporanea senza salvare Application.StatusBar = False AWB.Activate Set AWB = Nothing Set NWB = Nothing Else If cCount < 10 Then ' meno di 10 celle selezionate If MsgBox("Sei sicuro di voler stampare " & _ cCount & " celle selezionate ?", _ vbQuestion + vbYesNo, "Stampa celle scelte") = vbNo Th it Exit Sub End If Selection.PrintOut End If End Sub