Help. Excel Printing Macro

W

wmcray

Hello,

I have an Excel worksheet which has three pages of data and the rest o
the pages are blank.

Upon printing, a lot of blank pages will be printed.

Could anyone please instruct me how to write an Excel macro to contro
the page or print setting so that blank pages will not be printed?

Thank you!!

Jaso
 
B

Bob Kilmer

Suggestion: Record a macro while setting the print area, then examine and
adapt the code. You'll get something like this:

ActiveSheet.PageSetup.PrintArea = "$B$1:$B$36"

To be specific about which workbook and worksheet you are setting the print
area for, you might use

Workbooks("Book1.xls").Worksheets("Sheet1").PageSetup.PrintArea =
"$B$1:$B$36"

where you replace Book1.xls and Sheet1 with your own workbook and sheet
names.

"$B$1:$B$36" can be replaced with any statement that returns a range
address; e.g., Range(Cells(1,1),Cells(2,2)).Address

Regards,
Bob
 
T

Tom Ogilvy

Select the areas you want printed

then do
File=>Printarea =>Set PrintArea

If this doesn't do what you want, then you will need to rearrange you
data/hide rows you don't want printed and then set your printarea
 
P

Phil Webb

I can think of two reasons for Excel printing extra pages where there is no
data.

First, make sure you don't have a "hard-coded" print range. Select
File/Page Setup. Click on the Sheet tab. If there is a range specified in
the "Print Range" text box, delete it.

The second way you can be getting extra blank pages printing is an improper
"usedrange". To prove this is happening, select cell A1 and press
<Ctrl-End>. If the selected cell ends up well beyond where you have data,
then the sheet's usedrange is not accurate. This is a common Excel
occurance when you add and delete data or have cells formatted that are
beyond the range where you have actual data. You can delete the extra rows
and columns, and resave the workbook. When you reopen it, try the above
exercise again and the last cell should now contain data.

If this is an ongoing problem for you, I suggest putting the following macro
into you personal workbook. You can just run this to reset the usedrange.
This has the advantage on not having to save the workbook and reopening it.
I'm not sure where this came from originally, but I got it from an old post
from John Greene.

Sub ResetUsedRange()
ActiveSheet.UsedRange
End Sub

HTH
Phil Webb
 
G

Guest

Bob:

Sorry, I am looking around for ideas to solve a problem and this thread
seems to be related. Is there any way to code the following issue?

I have different worksheets in an XL 2002 file that I want to print in
tandem with a macro. I need to reset all possible page breaks and then set
the same print area for all of them. I can select all worksheets change the
page setup properties for Page, Margins and Headers/Footers, but I can't get
access to the options in the Sheet tab related to area and titles. Similarly
I can't get to do anything about the Page Breaks. Can you help me? This is
part of my code and I don't know what I am doing wrong.

Worksheets(Array("E1", "E2", "E3", "E4", "E5", "E6", "E7", "E8")).Select
SelectedSheets.ResetAllPageBreaks
SelectedSheets.PageSetup.PrintArea = "$G$13:$BE$242"
Range("G93").Select
SelectedSheets.HPageBreaks.Add Before:=ActiveCell
Range("X13").Select
SelectedSheets.VPageBreaks.Add Before:=ActiveCell
With SelectedSheets.PageSetup
.PrintTitleRows = "$1:$12"
.PrintTitleColumns = "$A:$F"
End with

You would really make my week if you have any suggestions.

Thanks
Roy

Bob Kilmer said:
Suggestion: Record a macro while setting the print area, then examine and
adapt the code. You'll get something like this:

ActiveSheet.PageSetup.PrintArea = "$B$1:$B$36"

To be specific about which workbook and worksheet you are setting the print
area for, you might use

Workbooks("Book1.xls").Worksheets("Sheet1").PageSetup.PrintArea =
"$B$1:$B$36"

where you replace Book1.xls and Sheet1 with your own workbook and sheet
names.

"$B$1:$B$36" can be replaced with any statement that returns a range
address; e.g., Range(Cells(1,1),Cells(2,2)).Address

Regards,
Bob
 
D

Dave Peterson

Sometimes looping through the worksheets works ok.

Dim wks As Worksheet
For Each wks In _
Worksheets(Array("E1", "E2", "E3", "E4", "E5", "E6", "E7", "E8"))
With wks
.ResetAllPageBreaks
.PageSetup.PrintArea = "$G$13:$BE$242"
Application.Goto .Range("G93")
.HPageBreaks.Add Before:=ActiveCell
Application.Goto .Range("X13")
.VPageBreaks.Add Before:=ActiveCell
With .PageSetup
.PrintTitleRows = "$1:$12"
.PrintTitleColumns = "$A:$F"
End With
End With
Next wks
Bob:

Sorry, I am looking around for ideas to solve a problem and this thread
seems to be related. Is there any way to code the following issue?

I have different worksheets in an XL 2002 file that I want to print in
tandem with a macro. I need to reset all possible page breaks and then set
the same print area for all of them. I can select all worksheets change the
page setup properties for Page, Margins and Headers/Footers, but I can't get
access to the options in the Sheet tab related to area and titles. Similarly
I can't get to do anything about the Page Breaks. Can you help me? This is
part of my code and I don't know what I am doing wrong.

Worksheets(Array("E1", "E2", "E3", "E4", "E5", "E6", "E7", "E8")).Select
SelectedSheets.ResetAllPageBreaks
SelectedSheets.PageSetup.PrintArea = "$G$13:$BE$242"
Range("G93").Select
SelectedSheets.HPageBreaks.Add Before:=ActiveCell
Range("X13").Select
SelectedSheets.VPageBreaks.Add Before:=ActiveCell
With SelectedSheets.PageSetup
.PrintTitleRows = "$1:$12"
.PrintTitleColumns = "$A:$F"
End with

You would really make my week if you have any suggestions.

Thanks
Roy
 
G

Guest

It worked.

Thanks Dave.

Roy

Dave Peterson said:
Sometimes looping through the worksheets works ok.

Dim wks As Worksheet
For Each wks In _
Worksheets(Array("E1", "E2", "E3", "E4", "E5", "E6", "E7", "E8"))
With wks
.ResetAllPageBreaks
.PageSetup.PrintArea = "$G$13:$BE$242"
Application.Goto .Range("G93")
.HPageBreaks.Add Before:=ActiveCell
Application.Goto .Range("X13")
.VPageBreaks.Add Before:=ActiveCell
With .PageSetup
.PrintTitleRows = "$1:$12"
.PrintTitleColumns = "$A:$F"
End With
End With
Next wks
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top