Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 20
Default Keep formating from old sheet in the new sheet

I have a macro which copies time sheets from the old/current sheet to a new
sheet.

I haave found that headers and other formating aspects of the sheet such as
row width and the page scaling is not maitained in the new sheet.

Is there a simple way of achieving this without resorting to using excels
macro recording facility?

Regards
Jorge
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 35,218
Default Keep formating from old sheet in the new sheet

It sounds like you're creating a new sheet, then copying the data from the other
sheet.

How about copying the original sheet.

Record a macro when you do:
edit|Move or copy sheet (check copy)

and you'll see the code.



JorgeG.ACT wrote:

I have a macro which copies time sheets from the old/current sheet to a new
sheet.

I haave found that headers and other formating aspects of the sheet such as
row width and the page scaling is not maitained in the new sheet.

Is there a simple way of achieving this without resorting to using excels
macro recording facility?

Regards
Jorge


--

Dave Peterson
  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 20
Default Keep formating from old sheet in the new sheet

Hi Dave,

I was originally copying the entire sheet but it was slowish process, so I
then only copied the cell I needed. That's when I found that headers and
formating were not copying to the new sheet. Hence my request for assistance.

Regards
Jorge

"Dave Peterson" wrote:

It sounds like you're creating a new sheet, then copying the data from the other
sheet.

How about copying the original sheet.

Record a macro when you do:
edit|Move or copy sheet (check copy)

and you'll see the code.



JorgeG.ACT wrote:

I have a macro which copies time sheets from the old/current sheet to a new
sheet.

I haave found that headers and other formating aspects of the sheet such as
row width and the page scaling is not maitained in the new sheet.

Is there a simple way of achieving this without resorting to using excels
macro recording facility?

Regards
Jorge


--

Dave Peterson

  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 20
Default Keep formating from old sheet in the new sheet

I just checked my previous macro that copied and moved the "old" sheet, but I
found that it wasn't carrying over the header and footer nor the page setup
properties such as layout.

Regards
Jorge

"Dave Peterson" wrote:

It sounds like you're creating a new sheet, then copying the data from the other
sheet.

How about copying the original sheet.

Record a macro when you do:
edit|Move or copy sheet (check copy)

and you'll see the code.



JorgeG.ACT wrote:

I have a macro which copies time sheets from the old/current sheet to a new
sheet.

I haave found that headers and other formating aspects of the sheet such as
row width and the page scaling is not maitained in the new sheet.

Is there a simple way of achieving this without resorting to using excels
macro recording facility?

Regards
Jorge


--

Dave Peterson

  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 35,218
Default Keep formating from old sheet in the new sheet

Copy|pastespecial|formats
Copy|pastespecial|columnwidths (xl2k and higher)

And you'll have to copy the headers/footers, too:

With newworksheethere.PageSetup
.LeftHeader = oldworksheethere.pagesetup.leftheader
.CenterHeader = oldworksheethere.pagesetup.centerheader
'and so on...
End with

You may find copying the worksheet is easier.

JorgeG.ACT wrote:

Hi Dave,

I was originally copying the entire sheet but it was slowish process, so I
then only copied the cell I needed. That's when I found that headers and
formating were not copying to the new sheet. Hence my request for assistance.

Regards
Jorge

"Dave Peterson" wrote:

It sounds like you're creating a new sheet, then copying the data from the other
sheet.

How about copying the original sheet.

Record a macro when you do:
edit|Move or copy sheet (check copy)

and you'll see the code.



JorgeG.ACT wrote:

I have a macro which copies time sheets from the old/current sheet to a new
sheet.

I haave found that headers and other formating aspects of the sheet such as
row width and the page scaling is not maitained in the new sheet.

Is there a simple way of achieving this without resorting to using excels
macro recording facility?

Regards
Jorge


--

Dave Peterson


--

Dave Peterson


  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 20
Default Keep formating from old sheet in the new sheet

Thanks Dave,

But I'm quite unfamilar with VBA; I've had a fair bit of assistance from
OssieMac.

I was unable to incorporate your code so below I have included what I have
so far in the hope you will be able to help.

Sub Insert_New_Sheet()
Dim oldShtName As String
Dim newShtName As String
Dim wSht As Object

oldShtName = ActiveSheet.Name

'Unprotect so that button will copy
'Replace OssieMac with your password.
Sheets(oldShtName).Unprotect ("1")

'Create string variable from date in
'Active Sheet cell K3 + 14 days
newShtName = Format(ActiveSheet.Range("K3") _
+ 14, "d-mm-yyyy")

'Test that new sheet name not previously created.
For Each wSht In Sheets
If LCase(wSht.Name) = LCase(newShtName) Then
MsgBox "Worksheet " & newShtName & _
" already exists." & Chr(13) & _
"Processing terminated"
End
End If
Next wSht

'If cell K3 in the old sheet is to be updated
'with the + 14 days then take the single quote _
'off the following line. (See comment at end also.)
'Sheets(oldShtName).Range("K3") = ActiveSheet.Range("K3") + 14

'Following line adds sheet as first sheet
'Sheets.Add Befo=Sheets(1)

'Following line adds sheet before active sheet
Sheets.Add Befo=Sheets(oldShtName)

'Following line adds sheet after active sheet
'Sheets.Add After:=Sheets(oldShtName)

'Following line adds sheet after last sheet
'Sheets.Add After:=Sheets(Sheets.Count)

ActiveSheet.Name = newShtName
Sheets(oldShtName).Cells.Copy
Sheets(newShtName).Paste

Sheets(oldShtName).Range("B33").Copy
Sheets(newShtName).Select
Range("B20").Select
ActiveSheet.Paste Link:=True

Application.CutCopyMode = False

'If you updated the date in cell K3
'in the original sheet above with the +14
'then it will have been copied with the update
'to the new sheet. However, if you did not
'include it above but want it updated in the
'new sheet then remove the single quote from _
'the following line.
Sheets(newShtName).Range("K3") = _
Sheets(newShtName).Range("K3") + 14

'Delete old data from new sheet
Range("K3").Select
Selection.Copy
Range("J39").Select
ActiveSheet.Paste
Range("B5:K8").Select
Selection.ClearContents
Range("B10:K13").Select
Selection.ClearContents
Range("B15:K19").Select
Selection.ClearContents
Range("F31").Select
Selection.ClearContents
Range("K1").Select
Selection.ClearContents

'Copy|pastespecial|formats
'Copy|pastespecial|columnwidths (xl2k and higher)

'And you'll have to copy the headers/footers, too:

With ActiveSheet.Name.pagesetup
.LeftHeader = oldShtName.pagesetup.LeftHeader
.CenterHeader = oldShtName.pagesetup.CenterHeader
'and so on...
End With


'Freezing Panes at B5
Range("B5").Select
ActiveWindow.FreezePanes = True


'Reprotect all works sheets
For Each ws In ActiveWorkbook.Worksheets

If ws.ProtectContents = False Then
ws.Protect ("1")

End If

Next

Application.ScreenUpdating = True

End Sub

"Dave Peterson" wrote:

Copy|pastespecial|formats
Copy|pastespecial|columnwidths (xl2k and higher)

And you'll have to copy the headers/footers, too:

With newworksheethere.PageSetup
.LeftHeader = oldworksheethere.pagesetup.leftheader
.CenterHeader = oldworksheethere.pagesetup.centerheader
'and so on...
End with

You may find copying the worksheet is easier.

JorgeG.ACT wrote:

Hi Dave,

I was originally copying the entire sheet but it was slowish process, so I
then only copied the cell I needed. That's when I found that headers and
formating were not copying to the new sheet. Hence my request for assistance.

Regards
Jorge

"Dave Peterson" wrote:

It sounds like you're creating a new sheet, then copying the data from the other
sheet.

How about copying the original sheet.

Record a macro when you do:
edit|Move or copy sheet (check copy)

and you'll see the code.



JorgeG.ACT wrote:

I have a macro which copies time sheets from the old/current sheet to a new
sheet.

I haave found that headers and other formating aspects of the sheet such as
row width and the page scaling is not maitained in the new sheet.

Is there a simple way of achieving this without resorting to using excels
macro recording facility?

Regards
Jorge

--

Dave Peterson


--

Dave Peterson

  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 35,218
Default Keep formating from old sheet in the new sheet

I find that using:

dim newSheetName as string
then
worksheets(newsheetname).name = ....
worksheets(newsheetname).range("a99").value = ....
clumsy to work with.

Instead of using a string variable to hold the name of the worksheet, you can
use a worksheet variable to hold a reference to that worksheet.

Dim NewSheet as worksheet
then
newsheet.name = ....
newsheet.range("a99").value = ....
easier to use and easier to understand.

This compiled and ran for me. I _think_ it does what you want, but you'll have
to test it to make sure.

Option Explicit
Sub Insert_New_Sheet()

Dim OldSheet As Worksheet
Dim NewSheet As Worksheet
Dim NewSheetName As String
Dim wSht As Worksheet

Set OldSheet = ActiveSheet

OldSheet.Unprotect Password:="1"

NewSheetName = Format(OldSheet.Range("K3").Value + 14, "d-mm-yyyy")

Set wSht = Nothing
On Error Resume Next
Set wSht = Worksheets(NewSheetName)
On Error GoTo 0

If wSht Is Nothing Then
'worksheet doesn't exist, keep going
Else
MsgBox "Worksheet " & NewSheetName & _
" already exists." & vbLf & _
"Processing terminated"
Exit Sub
End If

'Following line adds sheet before active sheet
Set NewSheet = Sheets.Add(Befo=OldSheet)

NewSheet.Name = NewSheetName

OldSheet.Cells.Copy _
destination:=NewSheet.Range("A1")

'same as pasting the link
NewSheet.Range("b20").Formula _
= "=" & OldSheet.Range("b33").Address(external:=True)

With NewSheet
.Range("K3").Value = .Range("K3").Value + 14

.Range("K3").Copy _
Destination:=.Range("j39")

.Range("B5:K8, b10:k13,b15:k19,f31,k1").ClearContents

End With

With NewSheet.PageSetup
.LeftHeader = OldSheet.PageSetup.LeftHeader
.CenterHeader = OldSheet.PageSetup.CenterHeader
'and so on...
End With

'Freezing Panes at B5
With NewSheet
.Select 'required for .freezepanes
.Range("a1").Select
.Range("B5").Select
ActiveWindow.FreezePanes = True
End With

'Reprotect all works sheets
For Each wSht In ActiveWorkbook.Worksheets
If wSht.ProtectContents = False Then
wSht.Protect Password:="1"
End If
Next wSht

Application.ScreenUpdating = True

End Sub


JorgeG.ACT wrote:

Thanks Dave,

But I'm quite unfamilar with VBA; I've had a fair bit of assistance from
OssieMac.

I was unable to incorporate your code so below I have included what I have
so far in the hope you will be able to help.

Sub Insert_New_Sheet()
Dim oldShtName As String
Dim newShtName As String
Dim wSht As Object

oldShtName = ActiveSheet.Name

'Unprotect so that button will copy
'Replace OssieMac with your password.
Sheets(oldShtName).Unprotect ("1")

'Create string variable from date in
'Active Sheet cell K3 + 14 days
newShtName = Format(ActiveSheet.Range("K3") _
+ 14, "d-mm-yyyy")

'Test that new sheet name not previously created.
For Each wSht In Sheets
If LCase(wSht.Name) = LCase(newShtName) Then
MsgBox "Worksheet " & newShtName & _
" already exists." & Chr(13) & _
"Processing terminated"
End
End If
Next wSht

'If cell K3 in the old sheet is to be updated
'with the + 14 days then take the single quote _
'off the following line. (See comment at end also.)
'Sheets(oldShtName).Range("K3") = ActiveSheet.Range("K3") + 14

'Following line adds sheet as first sheet
'Sheets.Add Befo=Sheets(1)

'Following line adds sheet before active sheet
Sheets.Add Befo=Sheets(oldShtName)

'Following line adds sheet after active sheet
'Sheets.Add After:=Sheets(oldShtName)

'Following line adds sheet after last sheet
'Sheets.Add After:=Sheets(Sheets.Count)

ActiveSheet.Name = newShtName
Sheets(oldShtName).Cells.Copy
Sheets(newShtName).Paste

Sheets(oldShtName).Range("B33").Copy
Sheets(newShtName).Select
Range("B20").Select
ActiveSheet.Paste Link:=True

Application.CutCopyMode = False

'If you updated the date in cell K3
'in the original sheet above with the +14
'then it will have been copied with the update
'to the new sheet. However, if you did not
'include it above but want it updated in the
'new sheet then remove the single quote from _
'the following line.
Sheets(newShtName).Range("K3") = _
Sheets(newShtName).Range("K3") + 14

'Delete old data from new sheet
Range("K3").Select
Selection.Copy
Range("J39").Select
ActiveSheet.Paste
Range("B5:K8").Select
Selection.ClearContents
Range("B10:K13").Select
Selection.ClearContents
Range("B15:K19").Select
Selection.ClearContents
Range("F31").Select
Selection.ClearContents
Range("K1").Select
Selection.ClearContents

'Copy|pastespecial|formats
'Copy|pastespecial|columnwidths (xl2k and higher)

'And you'll have to copy the headers/footers, too:

With ActiveSheet.Name.pagesetup
.LeftHeader = oldShtName.pagesetup.LeftHeader
.CenterHeader = oldShtName.pagesetup.CenterHeader
'and so on...
End With

'Freezing Panes at B5
Range("B5").Select
ActiveWindow.FreezePanes = True


'Reprotect all works sheets
For Each ws In ActiveWorkbook.Worksheets

If ws.ProtectContents = False Then
ws.Protect ("1")

End If

Next

Application.ScreenUpdating = True

End Sub

"Dave Peterson" wrote:

Copy|pastespecial|formats
Copy|pastespecial|columnwidths (xl2k and higher)

And you'll have to copy the headers/footers, too:

With newworksheethere.PageSetup
.LeftHeader = oldworksheethere.pagesetup.leftheader
.CenterHeader = oldworksheethere.pagesetup.centerheader
'and so on...
End with

You may find copying the worksheet is easier.

JorgeG.ACT wrote:

Hi Dave,

I was originally copying the entire sheet but it was slowish process, so I
then only copied the cell I needed. That's when I found that headers and
formating were not copying to the new sheet. Hence my request for assistance.

Regards
Jorge

"Dave Peterson" wrote:

It sounds like you're creating a new sheet, then copying the data from the other
sheet.

How about copying the original sheet.

Record a macro when you do:
edit|Move or copy sheet (check copy)

and you'll see the code.



JorgeG.ACT wrote:

I have a macro which copies time sheets from the old/current sheet to a new
sheet.

I haave found that headers and other formating aspects of the sheet such as
row width and the page scaling is not maitained in the new sheet.

Is there a simple way of achieving this without resorting to using excels
macro recording facility?

Regards
Jorge

--

Dave Peterson


--

Dave Peterson


--

Dave Peterson
  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 35,218
Default Keep formating from old sheet in the new sheet

Then your old macro wasn't copying the sheet--or something else was changing the
headers/footers.



JorgeG.ACT wrote:

I just checked my previous macro that copied and moved the "old" sheet, but I
found that it wasn't carrying over the header and footer nor the page setup
properties such as layout.

Regards
Jorge

"Dave Peterson" wrote:

It sounds like you're creating a new sheet, then copying the data from the other
sheet.

How about copying the original sheet.

Record a macro when you do:
edit|Move or copy sheet (check copy)

and you'll see the code.



JorgeG.ACT wrote:

I have a macro which copies time sheets from the old/current sheet to a new
sheet.

I haave found that headers and other formating aspects of the sheet such as
row width and the page scaling is not maitained in the new sheet.

Is there a simple way of achieving this without resorting to using excels
macro recording facility?

Regards
Jorge


--

Dave Peterson


--

Dave Peterson
  #9   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 2,510
Default Keep formating from old sheet in the new sheet

Hi again Jorge,

I have re-entered the discussion on this. Dave had a good suggestion in one
of his previous posts on this thread about copying the sheet instead of
adding a sheet and then copying the data and he is quite right because this
works better in that it copies everything about the sheet including print
setups, freeze panes etc. I also assume that you have some cells in the
worksheet which are not protected otherwise the users would not be able to
enter any data and the copy sheet looks after this also. Therefore I have
added yet another version for you by modifying Dave's code.

I have gained something from your info Dave so thanks for that.

Sub Insert_New_Sheet()

'Adapted from Dave Petersen's replies to Jorge.ACT 19 June 2007
Dim OldSheet As Worksheet
Dim NewSheet As Worksheet
Dim NewSheetName As String
Dim wSht As Worksheet
Dim errorResult
Set OldSheet = ActiveSheet

OldSheet.Unprotect Password:="1"

NewSheetName = Format(OldSheet.Range("K3").Value + 14, "d-mm-yyyy")

Set wSht = Nothing
On Error Resume Next
Set wSht = Worksheets(NewSheetName)
On Error GoTo 0

If wSht Is Nothing Then
'worksheet doesn't exist, keep going
Else
MsgBox "Worksheet " & NewSheetName & _
" already exists." & vbLf & _
"Processing terminated"
Exit Sub
End If

'Adds sheet before active sheet and renames
OldSheet.Copy Befo=OldSheet
Set NewSheet = ActiveSheet
NewSheet.Name = NewSheetName

'same as pasting the link
NewSheet.Range("B20").Formula _
= "=" & OldSheet.Range("B33").Address(external:=True)

With NewSheet
.Range("K3").Value = .Range("K3").Value + 14

.Range("K3").Copy _
Destination:=.Range("J39")

.Range("B5:K8, B10:K13,B15:K19,F31,K1").ClearContents

End With

For Each wSht In ActiveWorkbook.Worksheets
If wSht.ProtectContents = False Then
wSht.Protect Password:="1"
End If
Next wSht

Application.ScreenUpdating = True

End Sub

Regards,

OssieMac


"Dave Peterson" wrote:

I find that using:

dim newSheetName as string
then
worksheets(newsheetname).name = ....
worksheets(newsheetname).range("a99").value = ....
clumsy to work with.

Instead of using a string variable to hold the name of the worksheet, you can
use a worksheet variable to hold a reference to that worksheet.

Dim NewSheet as worksheet
then
newsheet.name = ....
newsheet.range("a99").value = ....
easier to use and easier to understand.

This compiled and ran for me. I _think_ it does what you want, but you'll have
to test it to make sure.

Option Explicit
Sub Insert_New_Sheet()

Dim OldSheet As Worksheet
Dim NewSheet As Worksheet
Dim NewSheetName As String
Dim wSht As Worksheet

Set OldSheet = ActiveSheet

OldSheet.Unprotect Password:="1"

NewSheetName = Format(OldSheet.Range("K3").Value + 14, "d-mm-yyyy")

Set wSht = Nothing
On Error Resume Next
Set wSht = Worksheets(NewSheetName)
On Error GoTo 0

If wSht Is Nothing Then
'worksheet doesn't exist, keep going
Else
MsgBox "Worksheet " & NewSheetName & _
" already exists." & vbLf & _
"Processing terminated"
Exit Sub
End If

'Following line adds sheet before active sheet
Set NewSheet = Sheets.Add(Befo=OldSheet)

NewSheet.Name = NewSheetName

OldSheet.Cells.Copy _
destination:=NewSheet.Range("A1")

'same as pasting the link
NewSheet.Range("b20").Formula _
= "=" & OldSheet.Range("b33").Address(external:=True)

With NewSheet
.Range("K3").Value = .Range("K3").Value + 14

.Range("K3").Copy _
Destination:=.Range("j39")

.Range("B5:K8, b10:k13,b15:k19,f31,k1").ClearContents

End With

With NewSheet.PageSetup
.LeftHeader = OldSheet.PageSetup.LeftHeader
.CenterHeader = OldSheet.PageSetup.CenterHeader
'and so on...
End With

'Freezing Panes at B5
With NewSheet
.Select 'required for .freezepanes
.Range("a1").Select
.Range("B5").Select
ActiveWindow.FreezePanes = True
End With

'Reprotect all works sheets
For Each wSht In ActiveWorkbook.Worksheets
If wSht.ProtectContents = False Then
wSht.Protect Password:="1"
End If
Next wSht

Application.ScreenUpdating = True

End Sub


JorgeG.ACT wrote:

Thanks Dave,

But I'm quite unfamilar with VBA; I've had a fair bit of assistance from
OssieMac.

I was unable to incorporate your code so below I have included what I have
so far in the hope you will be able to help.

Sub Insert_New_Sheet()
Dim oldShtName As String
Dim newShtName As String
Dim wSht As Object

oldShtName = ActiveSheet.Name

'Unprotect so that button will copy
'Replace OssieMac with your password.
Sheets(oldShtName).Unprotect ("1")

'Create string variable from date in
'Active Sheet cell K3 + 14 days
newShtName = Format(ActiveSheet.Range("K3") _
+ 14, "d-mm-yyyy")

'Test that new sheet name not previously created.
For Each wSht In Sheets
If LCase(wSht.Name) = LCase(newShtName) Then
MsgBox "Worksheet " & newShtName & _
" already exists." & Chr(13) & _
"Processing terminated"
End
End If
Next wSht

'If cell K3 in the old sheet is to be updated
'with the + 14 days then take the single quote _
'off the following line. (See comment at end also.)
'Sheets(oldShtName).Range("K3") = ActiveSheet.Range("K3") + 14

'Following line adds sheet as first sheet
'Sheets.Add Befo=Sheets(1)

'Following line adds sheet before active sheet
Sheets.Add Befo=Sheets(oldShtName)

'Following line adds sheet after active sheet
'Sheets.Add After:=Sheets(oldShtName)

'Following line adds sheet after last sheet
'Sheets.Add After:=Sheets(Sheets.Count)

ActiveSheet.Name = newShtName
Sheets(oldShtName).Cells.Copy
Sheets(newShtName).Paste

Sheets(oldShtName).Range("B33").Copy
Sheets(newShtName).Select
Range("B20").Select
ActiveSheet.Paste Link:=True

Application.CutCopyMode = False

'If you updated the date in cell K3
'in the original sheet above with the +14
'then it will have been copied with the update
'to the new sheet. However, if you did not
'include it above but want it updated in the
'new sheet then remove the single quote from _
'the following line.
Sheets(newShtName).Range("K3") = _
Sheets(newShtName).Range("K3") + 14

'Delete old data from new sheet
Range("K3").Select
Selection.Copy
Range("J39").Select
ActiveSheet.Paste
Range("B5:K8").Select
Selection.ClearContents
Range("B10:K13").Select
Selection.ClearContents
Range("B15:K19").Select
Selection.ClearContents
Range("F31").Select
Selection.ClearContents
Range("K1").Select
Selection.ClearContents

'Copy|pastespecial|formats
'Copy|pastespecial|columnwidths (xl2k and higher)

'And you'll have to copy the headers/footers, too:

With ActiveSheet.Name.pagesetup
.LeftHeader = oldShtName.pagesetup.LeftHeader
.CenterHeader = oldShtName.pagesetup.CenterHeader
'and so on...
End With

'Freezing Panes at B5
Range("B5").Select
ActiveWindow.FreezePanes = True


'Reprotect all works sheets
For Each ws In ActiveWorkbook.Worksheets

If ws.ProtectContents = False Then
ws.Protect ("1")

End If

Next

Application.ScreenUpdating = True

End Sub

"Dave Peterson" wrote:

Copy|pastespecial|formats
Copy|pastespecial|columnwidths (xl2k and higher)

And you'll have to copy the headers/footers, too:

With newworksheethere.PageSetup
.LeftHeader = oldworksheethere.pagesetup.leftheader
.CenterHeader = oldworksheethere.pagesetup.centerheader
'and so on...
End with

You may find copying the worksheet is easier.

JorgeG.ACT wrote:

Hi Dave,

I was originally copying the entire sheet but it was slowish process, so I
then only copied the cell I needed. That's when I found that headers and
formating were not copying to the new sheet. Hence my request for assistance.

Regards
Jorge

"Dave Peterson" wrote:

It sounds like you're creating a new sheet, then copying the data from the other
sheet.

How about copying the original sheet.

Record a macro when you do:
edit|Move or copy sheet (check copy)

and you'll see the code.



JorgeG.ACT wrote:

I have a macro which copies time sheets from the old/current sheet to a new
sheet.

I haave found that headers and other formating aspects of the sheet such as
row width and the page scaling is not maitained in the new sheet.

Is there a simple way of achieving this without resorting to using excels
macro recording facility?

Regards
Jorge

--

Dave Peterson


--

Dave Peterson


--

Dave Peterson

  #10   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 20
Default Keep formating from old sheet in the new sheet

I haven't had time to see the difference but you have really sped things up.

Thanks to you both I have learnt heaps

Jorge

"OssieMac" wrote:

Hi again Jorge,

I have re-entered the discussion on this. Dave had a good suggestion in one
of his previous posts on this thread about copying the sheet instead of
adding a sheet and then copying the data and he is quite right because this
works better in that it copies everything about the sheet including print
setups, freeze panes etc. I also assume that you have some cells in the
worksheet which are not protected otherwise the users would not be able to
enter any data and the copy sheet looks after this also. Therefore I have
added yet another version for you by modifying Dave's code.

I have gained something from your info Dave so thanks for that.

Sub Insert_New_Sheet()

'Adapted from Dave Petersen's replies to Jorge.ACT 19 June 2007
Dim OldSheet As Worksheet
Dim NewSheet As Worksheet
Dim NewSheetName As String
Dim wSht As Worksheet
Dim errorResult
Set OldSheet = ActiveSheet

OldSheet.Unprotect Password:="1"

NewSheetName = Format(OldSheet.Range("K3").Value + 14, "d-mm-yyyy")

Set wSht = Nothing
On Error Resume Next
Set wSht = Worksheets(NewSheetName)
On Error GoTo 0

If wSht Is Nothing Then
'worksheet doesn't exist, keep going
Else
MsgBox "Worksheet " & NewSheetName & _
" already exists." & vbLf & _
"Processing terminated"
Exit Sub
End If

'Adds sheet before active sheet and renames
OldSheet.Copy Befo=OldSheet
Set NewSheet = ActiveSheet
NewSheet.Name = NewSheetName

'same as pasting the link
NewSheet.Range("B20").Formula _
= "=" & OldSheet.Range("B33").Address(external:=True)

With NewSheet
.Range("K3").Value = .Range("K3").Value + 14

.Range("K3").Copy _
Destination:=.Range("J39")

.Range("B5:K8, B10:K13,B15:K19,F31,K1").ClearContents

End With

For Each wSht In ActiveWorkbook.Worksheets
If wSht.ProtectContents = False Then
wSht.Protect Password:="1"
End If
Next wSht

Application.ScreenUpdating = True

End Sub

Regards,

OssieMac


"Dave Peterson" wrote:

I find that using:

dim newSheetName as string
then
worksheets(newsheetname).name = ....
worksheets(newsheetname).range("a99").value = ....
clumsy to work with.

Instead of using a string variable to hold the name of the worksheet, you can
use a worksheet variable to hold a reference to that worksheet.

Dim NewSheet as worksheet
then
newsheet.name = ....
newsheet.range("a99").value = ....
easier to use and easier to understand.

This compiled and ran for me. I _think_ it does what you want, but you'll have
to test it to make sure.

Option Explicit
Sub Insert_New_Sheet()

Dim OldSheet As Worksheet
Dim NewSheet As Worksheet
Dim NewSheetName As String
Dim wSht As Worksheet

Set OldSheet = ActiveSheet

OldSheet.Unprotect Password:="1"

NewSheetName = Format(OldSheet.Range("K3").Value + 14, "d-mm-yyyy")

Set wSht = Nothing
On Error Resume Next
Set wSht = Worksheets(NewSheetName)
On Error GoTo 0

If wSht Is Nothing Then
'worksheet doesn't exist, keep going
Else
MsgBox "Worksheet " & NewSheetName & _
" already exists." & vbLf & _
"Processing terminated"
Exit Sub
End If

'Following line adds sheet before active sheet
Set NewSheet = Sheets.Add(Befo=OldSheet)

NewSheet.Name = NewSheetName

OldSheet.Cells.Copy _
destination:=NewSheet.Range("A1")

'same as pasting the link
NewSheet.Range("b20").Formula _
= "=" & OldSheet.Range("b33").Address(external:=True)

With NewSheet
.Range("K3").Value = .Range("K3").Value + 14

.Range("K3").Copy _
Destination:=.Range("j39")

.Range("B5:K8, b10:k13,b15:k19,f31,k1").ClearContents

End With

With NewSheet.PageSetup
.LeftHeader = OldSheet.PageSetup.LeftHeader
.CenterHeader = OldSheet.PageSetup.CenterHeader
'and so on...
End With

'Freezing Panes at B5
With NewSheet
.Select 'required for .freezepanes
.Range("a1").Select
.Range("B5").Select
ActiveWindow.FreezePanes = True
End With

'Reprotect all works sheets
For Each wSht In ActiveWorkbook.Worksheets
If wSht.ProtectContents = False Then
wSht.Protect Password:="1"
End If
Next wSht

Application.ScreenUpdating = True

End Sub


JorgeG.ACT wrote:

Thanks Dave,

But I'm quite unfamilar with VBA; I've had a fair bit of assistance from
OssieMac.

I was unable to incorporate your code so below I have included what I have
so far in the hope you will be able to help.

Sub Insert_New_Sheet()
Dim oldShtName As String
Dim newShtName As String
Dim wSht As Object

oldShtName = ActiveSheet.Name

'Unprotect so that button will copy
'Replace OssieMac with your password.
Sheets(oldShtName).Unprotect ("1")

'Create string variable from date in
'Active Sheet cell K3 + 14 days
newShtName = Format(ActiveSheet.Range("K3") _
+ 14, "d-mm-yyyy")

'Test that new sheet name not previously created.
For Each wSht In Sheets
If LCase(wSht.Name) = LCase(newShtName) Then
MsgBox "Worksheet " & newShtName & _
" already exists." & Chr(13) & _
"Processing terminated"
End
End If
Next wSht

'If cell K3 in the old sheet is to be updated
'with the + 14 days then take the single quote _
'off the following line. (See comment at end also.)
'Sheets(oldShtName).Range("K3") = ActiveSheet.Range("K3") + 14

'Following line adds sheet as first sheet
'Sheets.Add Befo=Sheets(1)

'Following line adds sheet before active sheet
Sheets.Add Befo=Sheets(oldShtName)

'Following line adds sheet after active sheet
'Sheets.Add After:=Sheets(oldShtName)

'Following line adds sheet after last sheet
'Sheets.Add After:=Sheets(Sheets.Count)

ActiveSheet.Name = newShtName
Sheets(oldShtName).Cells.Copy
Sheets(newShtName).Paste

Sheets(oldShtName).Range("B33").Copy
Sheets(newShtName).Select
Range("B20").Select
ActiveSheet.Paste Link:=True

Application.CutCopyMode = False

'If you updated the date in cell K3
'in the original sheet above with the +14
'then it will have been copied with the update
'to the new sheet. However, if you did not
'include it above but want it updated in the
'new sheet then remove the single quote from _
'the following line.
Sheets(newShtName).Range("K3") = _
Sheets(newShtName).Range("K3") + 14

'Delete old data from new sheet
Range("K3").Select
Selection.Copy
Range("J39").Select
ActiveSheet.Paste
Range("B5:K8").Select
Selection.ClearContents
Range("B10:K13").Select
Selection.ClearContents
Range("B15:K19").Select
Selection.ClearContents
Range("F31").Select
Selection.ClearContents
Range("K1").Select
Selection.ClearContents

'Copy|pastespecial|formats
'Copy|pastespecial|columnwidths (xl2k and higher)

'And you'll have to copy the headers/footers, too:

With ActiveSheet.Name.pagesetup
.LeftHeader = oldShtName.pagesetup.LeftHeader
.CenterHeader = oldShtName.pagesetup.CenterHeader
'and so on...
End With

'Freezing Panes at B5
Range("B5").Select
ActiveWindow.FreezePanes = True


'Reprotect all works sheets
For Each ws In ActiveWorkbook.Worksheets

If ws.ProtectContents = False Then
ws.Protect ("1")

End If

Next

Application.ScreenUpdating = True

End Sub

"Dave Peterson" wrote:

Copy|pastespecial|formats
Copy|pastespecial|columnwidths (xl2k and higher)

And you'll have to copy the headers/footers, too:



  #11   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 20
Default Keep formating from old sheet in the new sheet

Thanks Dave,

Learnt heaps.

Jorge

"Dave Peterson" wrote:

I find that using:

dim newSheetName as string
then
worksheets(newsheetname).name = ....
worksheets(newsheetname).range("a99").value = ....
clumsy to work with.

Instead of using a string variable to hold the name of the worksheet, you can
use a worksheet variable to hold a reference to that worksheet.

Dim NewSheet as worksheet
then
newsheet.name = ....
newsheet.range("a99").value = ....
easier to use and easier to understand.

This compiled and ran for me. I _think_ it does what you want, but you'll have
to test it to make sure.

Option Explicit
Sub Insert_New_Sheet()

Dim OldSheet As Worksheet
Dim NewSheet As Worksheet
Dim NewSheetName As String
Dim wSht As Worksheet

Set OldSheet = ActiveSheet

OldSheet.Unprotect Password:="1"

NewSheetName = Format(OldSheet.Range("K3").Value + 14, "d-mm-yyyy")

Set wSht = Nothing
On Error Resume Next
Set wSht = Worksheets(NewSheetName)
On Error GoTo 0

If wSht Is Nothing Then
'worksheet doesn't exist, keep going
Else
MsgBox "Worksheet " & NewSheetName & _
" already exists." & vbLf & _
"Processing terminated"
Exit Sub
End If

'Following line adds sheet before active sheet
Set NewSheet = Sheets.Add(Befo=OldSheet)

NewSheet.Name = NewSheetName

OldSheet.Cells.Copy _
destination:=NewSheet.Range("A1")

'same as pasting the link
NewSheet.Range("b20").Formula _
= "=" & OldSheet.Range("b33").Address(external:=True)

With NewSheet
.Range("K3").Value = .Range("K3").Value + 14

.Range("K3").Copy _
Destination:=.Range("j39")

.Range("B5:K8, b10:k13,b15:k19,f31,k1").ClearContents

End With

With NewSheet.PageSetup
.LeftHeader = OldSheet.PageSetup.LeftHeader
.CenterHeader = OldSheet.PageSetup.CenterHeader
'and so on...
End With

'Freezing Panes at B5
With NewSheet
.Select 'required for .freezepanes
.Range("a1").Select
.Range("B5").Select
ActiveWindow.FreezePanes = True
End With

'Reprotect all works sheets
For Each wSht In ActiveWorkbook.Worksheets
If wSht.ProtectContents = False Then
wSht.Protect Password:="1"
End If
Next wSht

Application.ScreenUpdating = True

End Sub


JorgeG.ACT wrote:

Thanks Dave,

But I'm quite unfamilar with VBA; I've had a fair bit of assistance from
OssieMac.

I was unable to incorporate your code so below I have included what I have
so far in the hope you will be able to help.

Sub Insert_New_Sheet()
Dim oldShtName As String
Dim newShtName As String
Dim wSht As Object

oldShtName = ActiveSheet.Name

'Unprotect so that button will copy
'Replace OssieMac with your password.
Sheets(oldShtName).Unprotect ("1")

'Create string variable from date in
'Active Sheet cell K3 + 14 days
newShtName = Format(ActiveSheet.Range("K3") _
+ 14, "d-mm-yyyy")

'Test that new sheet name not previously created.
For Each wSht In Sheets
If LCase(wSht.Name) = LCase(newShtName) Then
MsgBox "Worksheet " & newShtName & _
" already exists." & Chr(13) & _
"Processing terminated"
End
End If
Next wSht

'If cell K3 in the old sheet is to be updated
'with the + 14 days then take the single quote _
'off the following line. (See comment at end also.)
'Sheets(oldShtName).Range("K3") = ActiveSheet.Range("K3") + 14

'Following line adds sheet as first sheet
'Sheets.Add Befo=Sheets(1)

'Following line adds sheet before active sheet
Sheets.Add Befo=Sheets(oldShtName)

'Following line adds sheet after active sheet
'Sheets.Add After:=Sheets(oldShtName)

'Following line adds sheet after last sheet
'Sheets.Add After:=Sheets(Sheets.Count)

ActiveSheet.Name = newShtName
Sheets(oldShtName).Cells.Copy
Sheets(newShtName).Paste

Sheets(oldShtName).Range("B33").Copy
Sheets(newShtName).Select
Range("B20").Select
ActiveSheet.Paste Link:=True

Application.CutCopyMode = False

'If you updated the date in cell K3
'in the original sheet above with the +14
'then it will have been copied with the update
'to the new sheet. However, if you did not
'include it above but want it updated in the
'new sheet then remove the single quote from _
'the following line.
Sheets(newShtName).Range("K3") = _
Sheets(newShtName).Range("K3") + 14

'Delete old data from new sheet
Range("K3").Select
Selection.Copy
Range("J39").Select
ActiveSheet.Paste
Range("B5:K8").Select
Selection.ClearContents
Range("B10:K13").Select
Selection.ClearContents
Range("B15:K19").Select
Selection.ClearContents
Range("F31").Select
Selection.ClearContents
Range("K1").Select
Selection.ClearContents

'Copy|pastespecial|formats
'Copy|pastespecial|columnwidths (xl2k and higher)

'And you'll have to copy the headers/footers, too:

With ActiveSheet.Name.pagesetup
.LeftHeader = oldShtName.pagesetup.LeftHeader
.CenterHeader = oldShtName.pagesetup.CenterHeader
'and so on...
End With

'Freezing Panes at B5
Range("B5").Select
ActiveWindow.FreezePanes = True


'Reprotect all works sheets
For Each ws In ActiveWorkbook.Worksheets

If ws.ProtectContents = False Then
ws.Protect ("1")

End If

Next

Application.ScreenUpdating = True

End Sub

"Dave Peterson" wrote:

Copy|pastespecial|formats
Copy|pastespecial|columnwidths (xl2k and higher)

And you'll have to copy the headers/footers, too:

With newworksheethere.PageSetup
.LeftHeader = oldworksheethere.pagesetup.leftheader
.CenterHeader = oldworksheethere.pagesetup.centerheader
'and so on...
End with

You may find copying the worksheet is easier.

JorgeG.ACT wrote:

Hi Dave,

I was originally copying the entire sheet but it was slowish process, so I
then only copied the cell I needed. That's when I found that headers and
formating were not copying to the new sheet. Hence my request for assistance.

Regards
Jorge

"Dave Peterson" wrote:

It sounds like you're creating a new sheet, then copying the data from the other
sheet.

How about copying the original sheet.

Record a macro when you do:
edit|Move or copy sheet (check copy)

and you'll see the code.



JorgeG.ACT wrote:

I have a macro which copies time sheets from the old/current sheet to a new
sheet.

I haave found that headers and other formating aspects of the sheet such as
row width and the page scaling is not maitained in the new sheet.

Is there a simple way of achieving this without resorting to using excels
macro recording facility?

Regards
Jorge

--

Dave Peterson


--

Dave Peterson


--

Dave Peterson

  #12   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 390
Default Keep formating from old sheet in the new sheet

I recorded a macro and here is what I got

Sub Macro5()
'
' Macro5 Macro
'

'
Sheets("Current Loan Analysis").Select
ActiveSheet.Unprotect
Sheets("Current Loan Analysis").Select
ActiveSheet.Buttons.Add(1082.25, 34.5, 125.25, 80.25).Select
Sheets("Current Loan Analysis").Copy After:=Sheets(2)
Sheets("Current Loan Analysis (2)").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Sheets("Current Loan Analysis").Select
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False
Range("J1").Select
End Sub

The problem is - Sheets("Current Loan Analysis").Copy After:=Sheets(2)

next time there will be more sheets. I just want it added to the end. Also
I want to include the macro button that runs this macro. Will this work?





"Dave Peterson" wrote:

It sounds like you're creating a new sheet, then copying the data from the other
sheet.

How about copying the original sheet.

Record a macro when you do:
edit|Move or copy sheet (check copy)

and you'll see the code.



JorgeG.ACT wrote:

I have a macro which copies time sheets from the old/current sheet to a new
sheet.

I haave found that headers and other formating aspects of the sheet such as
row width and the page scaling is not maitained in the new sheet.

Is there a simple way of achieving this without resorting to using excels
macro recording facility?

Regards
Jorge


--

Dave Peterson

Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
FORMATING ONE SHEET TO MOVE U TO ANOTHER A. Gray Excel Worksheet Functions 0 May 29th 08 03:59 PM
selective sheet formating Trefor Excel Programming 3 November 25th 05 11:28 PM
Sheet Group & Formating in VBA Phatchef24[_3_] Excel Programming 1 August 23rd 04 07:51 PM
Inserting a row in sheet A should Insert a row in sheet B, removing a row in Sheet A should remove the corresponding row in sheet B Hannes Heckner Excel Programming 1 March 5th 04 09:10 AM
formating sheet Node321 Excel Programming 2 September 19th 03 12:56 PM


All times are GMT +1. The time now is 12:20 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"