I found the following code elsewhere and although it does work, it isn't quite what I need.
The code will take selected rows from an Excel spread sheet and print them on a single page. There are two issues with this code:
1. It doesn't remove blank lines between rows. If I select Row 1 and Row 6 it will print 4 blank lines between the rows (corresponds to the actual number of rows between each selection).
2. It only prints in Portrait mode, I need it to print in Landscape.
I am not a VBA programmer and know nothing about it. Would someone please add to or alter the code so it will work like I need it to?
The code will take selected rows from an Excel spread sheet and print them on a single page. There are two issues with this code:
1. It doesn't remove blank lines between rows. If I select Row 1 and Row 6 it will print 4 blank lines between the rows (corresponds to the actual number of rows between each selection).
2. It only prints in Portrait mode, I need it to print in Landscape.
I am not a VBA programmer and know nothing about it. Would someone please add to or alter the code so it will work like I need it to?
Code:
Sub PrintSelectedCells()
' prints selected cells, use from a toolbar button or a 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
' useful 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 = "Printing " & aCount & " selected areas..."
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
' find the row height of every row in the selection
rHeight(i) = Rows(i).RowHeight
Next i
For i = 1 To cCount
' find the column width of every column in the selection
cWidth(i) = Columns(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 To cCount ' set column widths
Columns(i).ColumnWidth = cWidth(i)
Next i
For i = 1 To aCount
AWB.Activate
aRange = Selection.Areas(i).Address
' the range address
Range(aRange).Copy ' copying the range
NWB.Activate
With Range(aRange) ' pastes values and formats
.PasteSpecial Paste:=xlValues, Operation:=xlNone, _
SkipBlanks:=True, Transpose:=False
.PasteSpecial Paste:=xlFormats, Operation:=xlNone, _
SkipBlanks:=True, Transpose:=False
End With
Application.CutCopyMode = False
Next i
NWB.Printout
NWB.Close False ' close the temporary workbook without saving
Application.StatusBar = True
AWB.Activate
Set AWB = Nothing
Set NWB = Nothing
Else
If cCount < 90 Then ' less than 90 cells selected
If MsgBox("Are you sure you want to print " & _
cCount & " selected cells ?", _
vbQuestion + vbYesNo, "Print celected cells") = vbNo Then Exit Sub
End If
Selection.PrintOut
End If
End Sub