What's the difference here?

I

Ian Chappel

I haven't been doiung any programming for a while, so maybe I'm a bit rusty,
but why do these two snippets produce two different results?

----DOES WHAT I EXPECT----

r = ActiveCell.Row
Rows(r + 1).EntireRow.Insert
Rows(r + 1).Font.ColorIndex = 3

----COLOR'S ROW 1 FURTHER DOWN----

r = ActiveCell.Row
With Rows(r + 1)
.EntireRow.Insert
.Font.ColorIndex = 3
End With

I dare say the answer's staring me in the face, but I can't see it!
 
J

JE McGimpsey

The difference is when Rows(r + 1) is evaluated.

In the first case, Rows(r+1) is evaluated in line 2 and a row inserted.
Then Rows(r+1) is evaluated again to color the cell. So if r = 100, a
row would be inserted at row 101 (pushing row 101 down to row 102) then
row 101 would be formatted.

In the second, Rows(r+1) is only evaluated once. Again assuming r = 100,
..EntireRow.Insert inserts a row at row 101. In the next line however,
the reference will be to the row that was row 101 when the With
statement was executed. Since a row was inserted and row 101 forced down
a row, that reference will now be to row 102.
 
M

mangesh_yadav

The behaviour does seem quite funny, but if you put line 2 before lin
1, then both the codes work same.

manges
 

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