Skriv ut flera val på ett ark med VBA i Microsoft Excel

Anonim

Om du väljer flera cellområden på ett ark och försöker skriva ut markerade celler kommer du
få ett ark för vart och ett av de valda områdena.
Följande exempelmakro kommer att skriva ut alla valda områden på ett ark,
förutom om områdena är för stora för att passa i ett ark.

Sub PrintSelectedCells () 'skriver ut markerade celler, använd från en verktygsfältsknapp eller en meny 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 ( ) Som enkel dim AWB som arbetsbok, NWB som arbetsbok om UCase (TypeName (ActiveSheet)) "WORKSHEET" Sedan avslutar Sub 'endast användbart i kalkylblad aCount = Selection.Areas.Count If aCount = 0 Sedan avsluta Sub' inga celler markerade cCount = Selection.Areas (1) .Cells.Count If aCount> 1 Sedan har flera områden valt Application.ScreenUpdating = False Application.StatusBar = "Skriva ut" & aCount & "utvalda områden …" Ange AWB = ActiveWorkbook rCount = ActiveSheet.Cells.SpecialCells (xlLastCell) .Row cCount = ActiveSheet.Cells.SpecialCells (xlLastCell) .Column ReDim rHeight (rCount) ReDim cWidth (cCount) För i = 1 To rCount 'hitta radhöjden för varje rad i markeringen rHöjd (i) = Rader (i) .RowHeight Nästa i För i = 1 Till cCount 'hitta kolumnbredden för varje kolumn i urvalet cWidt h (i) = Kolumner (i) .ColumnWidth Next i Set NWB = Workbooks.Add 'create a new workbook For i = 1 To rCount' set row heights Rows (i) .RowHeight = rHeight (i) Next i For i = 1 Till cCount 'ställ in kolumnbredder Kolumner (i) .ColumnWidth = cWidth (i) Nästa i För i = 1 Till aCount AWB.Activate aRange = Selection.Areas (i) .Adress' 'range address Range (aRange) .Copy' kopiera intervallet NWB.Activate With Range (aRange) pastor värden och format .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 'stäng den tillfälliga arbetsboken utan att spara Application.StatusBar = False AWB.Activate Set AWB = Nothing Set NWB = Nothing Else Om cCount <10 Då är det färre än 10 celler markerade Om MsgBox ("Är du säker på att du vill skriva ut" & _ cCount & "utvalda celler?", _ VbQuestion + vbYesNo, "Skriv ut utvalda celler") = vbNo Th sv Avsluta Sub End If Selection. PrintOut End If End Sub