Need Before_Save code

P

Phil Hageman

My workbook is named Scorecard, and its worksheets are
entitled Scorecard, Customer, Finance, and Employee.

When the user clicks the Save icon, I want the cursor in
each worksheet to be placed in Cell A1, and the worksheet
named Scorecard to be the the last worksheet changed.

The object is that when a another user first opens the
Workbook, the worksheet named Scorecard comes up first,
and as each of the other worksheets is opened, it shows
the top of the worksheet - thus the force of cursor to
cell A1.

Thanks, Phil
 
J

John Wilson

Phil,

If, as you say, you want a standard set-up when the user
"opens" the workbook, a simple way would be as follows:

Sub Auto_Open()
Application.ScreenUpdating = False
Worksheets("Employee").Activate
Range("A1").Activate
Worksheets("Customer").Activate
Range("A1").Activate
Worksheets("Finance").Activate
Range("A1").Activate
Worksheets("Scorecard").Activate
Range("A1").Activate
Application.ScreenUpdating = True
End Sub

The above macro, when placed in a regular module, will run whenever
the workbook is opened and insure that "Scorecard" is the active sheet
and that cell "A1" is the active cell on all the sheets.

John
 
P

Phil Hageman

John, Thanks for your reply. I copy/pasted the code into
the "This Workbook" module, but it doesn't work. There is
no error message to hint of the problem either. Is there
something I should look for?
Thanks, Phil
 
T

Trevor Shuttleworth

Or:

Sub Auto_Open()
Application.ScreenUpdating = False
Worksheets(Array("Employee", "Customer", "Finance", "Scorecard")).Select
Range("A1").Select
Worksheets("Scorecard").Select
Application.ScreenUpdating = True
End Sub

Regards

Trevor
 
P

Phil Hageman

John,

A new wrinkle - this code does indeed put the cursor in
A1, but you cant see cell A1, rather, it still shows
wherever the user left it when closing. How can I get the
screen to show cell A1?

Thanks, Phil
 
J

John Wilson

Trevor,

I need to "think" array more often.
Your way makes it much cleaner and more straightforward.

Thanx,
John
 
J

John Wilson

Phil,

The "ThisWorkbook" module is where the workbook "Event" code
is placed. With the ThisWorkbook module open, click the left
dropdown and select workbook and in the right dropdown, you can
see all of the events.
There are Sheet Modules too for coding the events specific to the
individual sheets.
Regular modules are for general coding for use anywhere in the
workbook.

Having said the above, were you to take the code that I gave
you (actually, use Trevors as it's more concise) and place it
in the Workbook_Open Event, (in the "ThisWorkbook" module,
it would work there too.

Example:

Private Sub Workbook_Open()
' Trevor's code
Application.ScreenUpdating = False
Worksheets(Array("Employee", "Customer", "Finance", "Scorecard")).Select

Range("A1").Select
Worksheets("Scorecard").Select
Application.ScreenUpdating = True
End Sub

John
 
J

John Wilson

Phil,

Trevor's code should cure this.
I used the .Activate as opposed to the .Select
as Trevor did.
That should cure the problem.

John
 
P

Phil Hageman

Trevpr and John,
Used the Array code - it puts the cursor in A1,
and "Scorecard" is the active worksheet, but in all
worksheets, the scroll does not put the document where A1
is visible. To test, I put the cursor at the end of each
worksheet - that is what is visible when opening.

Is there a scroll instruction to use?
Phil
-----Original Message-----
Or:

Sub Auto_Open()
Application.ScreenUpdating = False
Worksheets(Array
("Employee", "Customer", "Finance", "Scorecard")).Select
 
P

Phil Hageman

Trevpr and John,
Used the Array code - it puts the cursor in A1,
and "Scorecard" is the active worksheet, but in all
worksheets, the scroll does not put the document where A1
is visible. To test, I put the cursor at the end of each
worksheet - that is what is visible when opening.

Is there a scroll instruction to use?
Phil
-----Original Message-----
Or:

Sub Auto_Open()
Application.ScreenUpdating = False
Worksheets(Array
("Employee", "Customer", "Finance", "Scorecard")).Select
 
J

John Wilson

Phil,

Now I think I see what you're after.

The following is the long way of doing this (I'm sure there's
a more concise way), but it should do what you want:

Sub Auto_Open()
Application.ScreenUpdating = False
Worksheets("Employee").Activate
Range("A1").Activate
Application.Goto ActiveCell, True
Worksheets("Customer").Activate
Range("A1").Activate
Application.Goto ActiveCell, True
Worksheets("Finance").Activate
Range("A1").Activate
Application.Goto ActiveCell, True
Worksheets("Scorecard").Activate
Range("A1").Activate
Application.Goto ActiveCell, True
Application.ScreenUpdating = True
End Sub

John
 
T

Trevor Shuttleworth

John

a concise way ? ;-) Sure there's better (and probably shorter)

Sub Auto_Open()
Application.ScreenUpdating = False
For Each ws In Worksheets
ws.Select
Application.Goto ws.Range("A1"), True
Next
Worksheets("Scorecard").Select
Application.ScreenUpdating = True
End Sub

Regards

Trevor
 
J

John Wilson

Trevor,

Yep, that'll do it.
Was concentrating on using the sheet names theat the OP was using
but for what he wanted to do, cycling through all sheets the way you
suggest is better.
The only named sheet that needed to be referenced was the one that
he wanted visible all the time.

John
 
P

Phil Hageman

IT WORKS PERFECTLY!!! Thanks guys for taking so much time
with this. One thing about this code - it's so easily
transportable to any workbook. Again, thank you. Phil
 

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