Format multiple sheets in VBA

D

DrDave1958

If I turn on the macro recorder, then select sheets 3 thru 10 (group), then go to file, page setup, and make the changes I desire, the changes are applied to all sheets selected. When I run the VBA code I just recorded, it only formats the active sheet. What am I doing wrong?

Thanks, Dave

Excel XP
Win XP
 
D

Doug Glancy

I did as you described and this is what I found (Win 2000, XL 2000):

The original recording did not work, as you said:

Sub test() 'this doesn't work
Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
Sheets("Sheet1").Activate
Range("A1").Select
Selection.Font.Bold = True
End Sub

However, eliminating the second line made it work as you'd want:

Sub test() 'this works
Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
Range("A1").Select
Selection.Font.Bold = True
End Sub

Strangely, if I try to condense it further to avoid selecting a range, it
doesn't work again:

Sub test() 'this doesn't work
Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
Range("A1").Font.Bold = True
End Sub

Ultimately, will probably want to look at formatting a collection of sheets,
using the for-each construct, e.g.,

Sub test()

Dim sh As Worksheet

For Each sh In Sheets(Array("Sheet1", "Sheet2", "Sheet3"))
sh.Range("A1").Font.Bold = True
Next sh

End Sub

hth (at least a little),

Doug

DrDave1958 said:
If I turn on the macro recorder, then select sheets 3 thru 10 (group),
then go to file, page setup, and make the changes I desire, the changes are
applied to all sheets selected. When I run the VBA code I just recorded, it
only formats the active sheet. What am I doing wrong?
 
T

Tom Ogilvy

Most grouping activities are not supported in VBA. As Doug has discovered,
this can sometimes be overcome by selecting a cell - however this has no
application to pagesetup. For page setup, you have to loop through the
sheets and make your settings on each one.

for each sh in Sheets("Array("sheet2", "sheet3", "sheet4")
With sh.PageSetup
.LeftFooter = "ABCD"
' etc
End With
Next

A trick recently posted by KeepItcool is to format one sheet, then transmit
this to the remaining

With Sheets("Sheet3").PageSetup
.LeftFooter = "ABCD"
'etc
End with
sheets(array("sheet2","sheet3","sheet4")).select
sheets("sheet3").activate
SendKeys "{enter}"
Application.Dialogs(xlDialogPageSetup).Show
Sheets("Sheet3").Select 'ungroups the sheets
--
Regards,
Tom Ogilvy



DrDave1958 said:
If I turn on the macro recorder, then select sheets 3 thru 10 (group),
then go to file, page setup, and make the changes I desire, the changes are
applied to all sheets selected. When I run the VBA code I just recorded, it
only formats the active sheet. What am I doing wrong?
 

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