macro to insert row and copy previous row + excel

B

Biffo

I have a named range First_Table (A5:AB30 ) and a named range End_Table (A30).
I would like to insert a row above the named range End_Table (A30).
Then copy the contents and formula from cells F29:AB29 into the new row.

However every time I run the macro it seems to insert the new row in a
different place which is messing up my data.

Can anyone help me please?
 
D

Dave Peterson

This doesn't work on columns A:AB. It works on the entire row.

When I do this, I usually don't have anything to the right of the table and I
want the entire row inserted and copied.

If that's not what you want, post back.

Option Explicit
Sub testme()

Dim wks As Worksheet
Dim FirstTableRng As Range
Dim LastCellInTableCol1 As Range

With Worksheets("Sheet1") 'change to what you need
Set FirstTableRng = .Range("First_Table")
End With

With FirstTableRng.Columns(1)
Set LastCellInTableCol1 = .Cells(.Cells.Count)
End With

With LastCellInTableCol1
.EntireRow.Insert
.Offset(-2, 0).Copy _
Destination:=.Offset(-1, 0)
End With

End Sub
 
B

Biffo

Sorry about that Otto.

Sub Add_Student()
'
' Add_Student Macro
' Macro recorded 21/12/2009 by Phil
'

'
Application.Goto Reference:="First_Table"
Range("A26").Select
Selection.EntireRow.Insert
Range("F25:Y25").Select
Selection.AutoFill Destination:=Range("F25:Y26"), Type:=xlFillDefault
Range("F25:Y26").Select
Range("A27").Select

End Sub
 
B

Biffo

Sorry again first reply did not work. If this one does not work I will start
a new thread.

Sub Add_Student()
'
' Add_Student Macro
' Macro recorded 21/12/2009 by Phil
'

'
Application.Goto Reference:="First_Table"
Range("A26").Select
Selection.EntireRow.Insert
Range("F25:Y25").Select
Selection.AutoFill Destination:=Range("F25:Y26"), Type:=xlFillDefault
Range("F25:Y26").Select
Range("A27").Select

End Sub
 
B

Biffo

Hi Dave It's inserting the row in the right place Yeah!, but not copying the
formulas etc down, sorry to be a pain:)
 
D

Dave Peterson

I was going to change it to work with just A:AB, but then decided not to. But I
didn't correct my partial changes...

With LastCellInTableCol1
.EntireRow.Insert
'added the .entirerow on the next line
.Offset(-2, 0).EntireRow.Copy _
Destination:=.Offset(-1, 0)
End With
Hi Dave It's inserting the row in the right place Yeah!, but not copying the
formulas etc down, sorry to be a pain:)
 
D

Dave Peterson

In fact, if that table ever moved from column A, then this would work better:

With LastCellInTableCol1
.EntireRow.Insert
.Offset(-2, 0).EntireRow.Copy _
Destination:=.Offset(-1, 0).EntireRow.Cells(1)
End With

(And it still works ok if the table starts in column A. I'd use this version.)
 
B

Biffo

Hi Dave you are a star! 'Hi five monitor'.
This is working brilliantly. Yeah 'punching the air'
Sorry, but I still get over-excited when code works
--
Laura


Dave Peterson said:
In fact, if that table ever moved from column A, then this would work better:

With LastCellInTableCol1
.EntireRow.Insert
.Offset(-2, 0).EntireRow.Copy _
Destination:=.Offset(-1, 0).EntireRow.Cells(1)
End With

(And it still works ok if the table starts in column A. I'd use this version.)
 
B

Biffo

Dave you are a STAR! (hi 5 monitor)
This is working brilliantly - YEAH (punching the air)
Sorry, but I still get over-excited when code works
--
Laura


Dave Peterson said:
In fact, if that table ever moved from column A, then this would work better:

With LastCellInTableCol1
.EntireRow.Insert
.Offset(-2, 0).EntireRow.Copy _
Destination:=.Offset(-1, 0).EntireRow.Cells(1)
End With

(And it still works ok if the table starts in column A. I'd use this version.)
 
D

Dave Peterson

Glad it worked for you.
Dave you are a STAR! (hi 5 monitor)
This is working brilliantly - YEAH (punching the air)
Sorry, but I still get over-excited when code works
 
B

Biffo

Hi again
If you use ActiveSheet instead of a named sheet you can then copy the whole
sheet for a different set of data and the code still works :)

With ActiveSheet 'change to what you need
Set FirstTableRng = .Range("First_Table")
End With

--
Laura


Dave Peterson said:
Glad it worked for you.
 
D

Dave Peterson

Be careful. If the activesheet doesn't have a range with that name, the code
won't work.

Option Explicit
Sub testme()

Dim wks As Worksheet
Dim FirstTableRng As Range
Dim LastCellInTableCol1 As Range

With Activesheet
set firsttablerng = nothing
on error resume next
Set FirstTableRng = .Range("First_Table")
on error goto 0
End With

if firsttablerng is nothing then
msgbox "activesheet doesn't have a range named First_table" & vblf _
& "Please change sheets or create that named range."
exit sub
end if

With FirstTableRng.Columns(1)
Set LastCellInTableCol1 = .Cells(.Cells.Count)
End With

With LastCellInTableCol1
.EntireRow.Insert
.Offset(-2, 0).EntireRow.Copy _
Destination:=.Offset(-1, 0).EntireRow.Cells(1)
End With

End Sub
 

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