ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   problem with offset -how to re-write line? (https://www.excelbanter.com/excel-programming/417786-problem-offset-how-re-write-line.html)

PBcorn

problem with offset -how to re-write line?
 
The following very simple code generates a 1004 error (* indicates line).
Help required! Thanks. I think the problem may be due to the fact that he
usedrange starts from row 1, therefore during the AND logical test offset(-1)
refers to a row that does not exist. However I am unsure of the best way to
re-write this. The purpose of the AND test is to ignore rows that have just
been inserted, otherwise the macro inserts multiple rows above cll.


subxy()

dim cll as range
dim sht as worksheet

'for each sheet in workbook

for each sht in thisworkbook.worksheets

'for each cell in column 2 of the usedrange


For Each cll In sht.UsedRange.Columns(2).Cells

' if the value of the cell is "xy", and the cell above it is not 0, insert a
row.
If cll.Value = "xy" And cll.Offset(-1, 0).value < 0 Then*

cll.EntireRow.Insert

Else: End If
Next cll

next sht

end sub

Peter T

problem with offset -how to re-write line?
 
Various ways -

For Each cll In sht.UsedRange.Columns(2).Cells
if cll.row = 2 then

In theory the UR might start in row 2 or lower and I don't suppose you'd
want to process the first row, even if it doesn't fail

for each sht in thisworkbook.worksheets
bFlag = True
For Each cll In sht.UsedRange.Columns(2).Cells
If bFlag then
bFlag = false
else
' code to check and insert etc
End if

Another thing, do you want to process sheets in which the UR is only one
column, eg an empty sheet. If not, skip the sheet if
sht.UsedRange.Columns.Count < 2

Regards,
Peter T


"PBcorn" wrote in message
...
The following very simple code generates a 1004 error (* indicates line).
Help required! Thanks. I think the problem may be due to the fact that he
usedrange starts from row 1, therefore during the AND logical test
offset(-1)
refers to a row that does not exist. However I am unsure of the best way
to
re-write this. The purpose of the AND test is to ignore rows that have
just
been inserted, otherwise the macro inserts multiple rows above cll.


subxy()

dim cll as range
dim sht as worksheet

'for each sheet in workbook

for each sht in thisworkbook.worksheets

'for each cell in column 2 of the usedrange


For Each cll In sht.UsedRange.Columns(2).Cells

' if the value of the cell is "xy", and the cell above it is not 0, insert
a
row.
If cll.Value = "xy" And cll.Offset(-1, 0).value < 0 Then*

cll.EntireRow.Insert

Else: End If
Next cll

next sht

end sub





All times are GMT +1. The time now is 08:46 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com