Jeśli wybierzesz wiele zakresów komórek na jednym arkuszu i spróbujesz wydrukować wybrane komórki, będziesz
otrzymaj po jednym arkuszu dla każdego z wybranych obszarów.
Poniższe przykładowe makro wydrukuje wszystkie wybrane obszary na jednym arkuszu,
chyba że obszary są zbyt duże, aby zmieścić się w jednym arkuszu.
Sub PrintSelectedCells() ' drukuje wybrane komórki, użyj przycisku paska narzędzi lub 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 ' przydatne tylko w arkuszach roboczych aCount = Selection.Areas.Count If aCount = 0 Then Exit Sub ' nie zaznaczono komórek cCount = Selection.Areas(1).Cells.Count If aCount > 1 Then ' zaznaczono wiele obszarów Application.ScreenUpdating = False Application.StatusBar = "Drukowanie " & aCount & " wybrane obszary… " Ustaw 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 ' znajdź wysokość każdego wiersza w zaznaczeniu rHeight(i) = Wiersze (i).RowHeight Next i For i = 1 To cCount ' znajdź szerokość każdej kolumny w zaznaczeniu cWidt h(i) = Columns(i).ColumnWidth Next i Set NWB = Workbooks.Add ' utwórz nowy skoroszyt For i = 1 To rCount ' ustaw wysokość wierszy Rows(i).RowHeight = rHeight(i) Next i For i = 1 To cCount ' ustaw szerokość kolumn Columns(i).ColumnWidth = cWidth(i) Next i For i = 1 To aCount AWB.Activate aRange = Selection.Areas(i).Address ' adres zakresu Range(aRange).Copy ' kopiowanie zakresu NWB.Activate With Range(aRange) ' wkleja wartości i formaty .PasteSpecial Paste:=xlValues, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False .PasteSpecial Paste:=xlFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Koniec z Application.CutCopyMode = False Dalej i NWB.PrintOut NWB.Close False ' zamknij skoroszyt tymczasowy bez zapisywania Application.StatusBar = False AWB.Activate Set AWB = Nic nie ustaw NWB = Nic więcej If cCount < 10 Then ' zaznaczono mniej niż 10 komórek If MsgBox("Czy na pewno chcesz wydrukować " & _ cCount & " zaznaczone komórki?", _ vbQuestion + vbYesNo, "Drukuj zaznaczone komórki") = vbNo Th pl Zakończ Sub Koniec Jeśli zaznaczenie.Wydruk Koniec Jeśli Koniec Sub