Simplify Code for Copy/Paste Special

A

Active VBA

Is there a way to simplify this code below?
If you could please suggest a revised code, it would be greatly
appreciated. Thanks.


Sub update_analysis()
'
' Macro recorded July 2008
'

'
Application.ScreenUpdating = False
Sheets("Interest").Select
Range("E28:DI28").Select
Selection.Copy
Range("E29").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Range("G5").Select
ActiveCell.FormulaR1C1 = "=NOW()"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Sheets("Principal").Select
Range("E28:DI28").Select
Selection.Copy
Range("E29").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Range("G5").Select
ActiveCell.FormulaR1C1 = "=NOW()"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Sheets("Leasing Analysis").Select
Range("A2").Select
Application.ScreenUpdating = True
End Sub




Thank you for your help in advance.

Best regards,

Active VBA
 
P

Per Jessen

Hi

It could look like this:

Sub update_analysis()
'
' Macro recorded July 2008
'

'
Application.ScreenUpdating = False
Sheets("Interest").Select
Range("E28:DI28").Copy
Range("E29", Range("E29").End(xlDown)).PasteSpecial Paste:=xlPasteAll, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False

Range("G5").Value = Date & " " & Format(Time, "hh:mm")

Sheets("Principal").Select
Range("E28:DI28").Copy
Range("E29", Range("E29").End(xlDown)).PasteSpecial Paste:=xlPasteAll, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Range("G5").Value = Date & " " & Format(Time, "hh:mm")

Sheets("Leasing Analysis").Select
Range("A2").Select
Application.ScreenUpdating = True
End Sub

Regards,
Per
 
D

Don Guillett

Something like this?

Sub update_analysis()
Application.ScreenUpdating = False
with Sheets("Interest")
.Range("E28:DI28").Copy
.Range("E29").End(xlDown)).PasteSpecial Paste:=xlPasteValues
.Range("G5")=date
end with

with Sheets("Principal")
.Range("E28:DI28").Copy
.Range("E29").End(xlDown)).PasteSpecial Paste:=xlPasteValues
.range("g5")=date
end with

'shouldn't be necessary
'Sheets("Leasing Analysis").Select
'Range("A2").Select

Application.ScreenUpdating = True
End Sub
 
D

Don Guillett

.Range("E29").End(xlDown)).PasteSpecial Paste:=xlPasteValues
Actually should be
..Range(Range("e29"), Range("E29").End(xlDown)).PasteSpecial
Paste:=xlPasteValues

Try this further simplification and correction
Sub sheetsinarray()
myarray = Array("Interest", "Principal")
For Each Sh In myarray
With Sheets(Sh)
.Range("E28:DI28").Copy
.Range(Range("e29"), Range("E29").End(xlDown)) _
.PasteSpecial Paste:=xlPasteValues
.Range("G5") = Now 'Date
End With
Next Sh
End Sub
 
Joined
Aug 27, 2008
Messages
44
Reaction score
0
Code:
Dim SheetName as Variant
For Each SheetName in Array("Interest,"Principal")
   With ActiveWorkbook.Sheets(SheetName)
       With .Range("E28: DI28")
           .Cells(2,1).End(xlDown)).Resize(1,.Columns.Count).Value = .Value
       End With
       .Range("G5").Value = Now()
   End With
Next SheetName
With ActiveWorkbook.Sheets("Leasing Analysis")
    .Activate
    .Range("A1").Select
End with
 
V

velocityinc

 .Range("E29").End(xlDown)).PasteSpecial Paste:=xlPasteValues
Actually should be
.Range(Range("e29"), Range("E29").End(xlDown)).PasteSpecial
Paste:=xlPasteValues

Try this further simplification and correction
Sub sheetsinarray()
myarray = Array("Interest", "Principal")
For Each Sh In myarray
With Sheets(Sh)
    .Range("E28:DI28").Copy
    .Range(Range("e29"), Range("E29").End(xlDown)) _
         .PasteSpecial Paste:=xlPasteValues
    .Range("G5") = Now 'Date
End With
Next Sh
End Sub

--
Don Guillett
Microsoft MVP Excel
SalesAid Software










- Show quoted text -

Code you suggest did not work for some reason.?? Any suggestions.
Thanks, V.
 
V

velocityinc

Code you suggest did not work for some reason.?? Any suggestions.
Thanks, V.- Hide quoted text -

- Show quoted text -

any help on this will be greatly appreciated..............will keep my
spreadsheet to a manageable size (under 4 Meg as opposed to 34 Meg)
 
D

Don Guillett

If desired, send your workbook to my address below along with snippets of
these emails and a clear explanation of what you want to happen along with
before/after examples.

--
Don Guillett
Microsoft MVP Excel
SalesAid Software
(e-mail address removed)
Code you suggest did not work for some reason.?? Any suggestions.
Thanks, V.- Hide quoted text -

- Show quoted text -

any help on this will be greatly appreciated..............will keep my
spreadsheet to a manageable size (under 4 Meg as opposed to 34 Meg)
 
V

velocityinc

If desired, send your workbook to my address below along with snippets of
these emails and a clear explanation of what you want to happen along with
before/after examples.

--
Don Guillett
Microsoft MVP Excel
SalesAid Software





any help on this will be greatly appreciated..............will keep my
spreadsheet to a manageable size (under 4 Meg as opposed to 34 Meg)

Imagine a spreadsheet that has 2 tabs (“interest” and “principal”).
The objective is to copy the formulae from cell E28:DC28, and paste
the formulae down to, let’s say, row 500. Once this is done, all the
cells that we pasted should now turn into hard coded values on each of
these two tabs. The purpose is to save file space. If you could
kindly provide me with a better way to do this than I have shown, it
would be much appreciated.

V.
 
D

Don Guillett

I prefer TOP posting. Based on what you have told me, I thought that's what
I provided. I repeat my offer.

--
Don Guillett
Microsoft MVP Excel
SalesAid Software
(e-mail address removed)
If desired, send your workbook to my address below along with snippets of
these emails and a clear explanation of what you want to happen along with
before/after examples.

--
Don Guillett
Microsoft MVP Excel
SalesAid Software





any help on this will be greatly appreciated..............will keep my
spreadsheet to a manageable size (under 4 Meg as opposed to 34 Meg)

Imagine a spreadsheet that has 2 tabs (“interest” and “principal”).
The objective is to copy the formulae from cell E28:DC28, and paste
the formulae down to, let’s say, row 500. Once this is done, all the
cells that we pasted should now turn into hard coded values on each of
these two tabs. The purpose is to save file space. If you could
kindly provide me with a better way to do this than I have shown, it
would be much appreciated.

V.
 
J

J. Andrew Smith

Rule #1: *Never* use Cut Copy and Paste methods in macros, because the user
might be multi-tasking, and you're messing with the *Window* clipboard.

OK, here's how to do all this without CCP, and faster too:

With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With

With Worksheets("Interest")

With .Range("DI28", .Range("E29").End(xlDown)) ' Define upper right
to lower left corners of whole range

.Rows(1).AutoFill .Cells, xlFillCopy ' copies formulas with
relative addressing
Application.Calculate ' recalculates formulas
.Cells.Value = .Cells.Value ' replaces formulas with values

End With

.Range("G5").Value = Now() ' Not the Excel function, the VBA function

End With

With Worksheets("Principal")
' same code block
End With
 

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