ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Loop hits Row 8 and goes to End Sub?? (https://www.excelbanter.com/excel-programming/280403-loop-hits-row-8-goes-end-sub.html)

Ed[_9_]

Loop hits Row 8 and goes to End Sub??
 
This workbook contains three columns - column C is an occasional "X"
inserted by another macro. A macro is supposed to run down Col C and delete
any row containing "X". It works fine, skipping past blank rows and
deleting X'ed rows - until it processes Row 8, that is.

I just stepped through this *again* looking at variable values after each
step. NowRow was 7, LastRow was 76, C was blank. The macro Offset one row
as programmed, updated NowRow to 8, went to Loop, AND THEN WENT TO END SUB!
Fourth time in a row! Can someone drop-kick me in the direction of "WHY?!?"

Ed
_______________________

Sub BBoxUpdate()

Dim NowRow As String
Dim LastRow As String

' Find end of used range
LastRow = Range("A65536").End(xlUp).Row

' Start at C1 and search down
Range("C1").Select
NowRow = ActiveCell.Row

Do While NowRow <= LastRow

' If cell has "X", delete row
If ActiveCell.Value < "" Then
ActiveCell.EntireRow.Delete
' and update LastRow
LastRow = Range("A65536").End(xlUp).Row
Else ' Drop one row
ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Select
NowRow = ActiveCell.Row ' update variable
End If

Loop

End Sub



Tom Ogilvy

Loop hits Row 8 and goes to End Sub??
 
Sub BBoxUpdate()

Dim NowRow As String
Dim LastRow As String

' Find end of used range
LastRow = Range("A65536").End(xlUp).Row

' Start at last row and search up

for NowRow = LastRow to 1
' If cell has "X", delete row
If cells(NowRow,3).Value < "" Then
Cells(NowRow,3).EntireRow.Delete
End If
Next
End Sub

--
Regards,
Tom Ogilvy

"Ed" wrote in message
...
This workbook contains three columns - column C is an occasional "X"
inserted by another macro. A macro is supposed to run down Col C and

delete
any row containing "X". It works fine, skipping past blank rows and
deleting X'ed rows - until it processes Row 8, that is.

I just stepped through this *again* looking at variable values after each
step. NowRow was 7, LastRow was 76, C was blank. The macro Offset one

row
as programmed, updated NowRow to 8, went to Loop, AND THEN WENT TO END

SUB!
Fourth time in a row! Can someone drop-kick me in the direction of

"WHY?!?"

Ed
_______________________

Sub BBoxUpdate()

Dim NowRow As String
Dim LastRow As String

' Find end of used range
LastRow = Range("A65536").End(xlUp).Row

' Start at C1 and search down
Range("C1").Select
NowRow = ActiveCell.Row

Do While NowRow <= LastRow

' If cell has "X", delete row
If ActiveCell.Value < "" Then
ActiveCell.EntireRow.Delete
' and update LastRow
LastRow = Range("A65536").End(xlUp).Row
Else ' Drop one row
ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Select
NowRow = ActiveCell.Row ' update variable
End If

Loop

End Sub





steve

Loop hits Row 8 and goes to End Sub??
 
Ed,

Try it this way:

Sub BBoxUpdate()

Dim x as Long
Dim LastRow As Long

' prevent screen flicker and make code faster
Application.ScreenUpdating = False

' Find end of used range
LastRow = Range("A65536").End(xlUp).Row

' Start at end of range and work up
For x = 1 to LastRow step -1
' If cell has "X", delete row
If LCase(Cells(x,3)) = "x" Then ' LCase to catch x or X
Rows(x).Delete
End If
Next


Application.ScreenUpdating = True
End Sub

Also you declared NowRow and LastRow as Strings. They would work
better as Long since they are numbers.
--
sb
"Ed" wrote in message
...
This workbook contains three columns - column C is an occasional "X"
inserted by another macro. A macro is supposed to run down Col C and

delete
any row containing "X". It works fine, skipping past blank rows and
deleting X'ed rows - until it processes Row 8, that is.

I just stepped through this *again* looking at variable values after each
step. NowRow was 7, LastRow was 76, C was blank. The macro Offset one

row
as programmed, updated NowRow to 8, went to Loop, AND THEN WENT TO END

SUB!
Fourth time in a row! Can someone drop-kick me in the direction of

"WHY?!?"

Ed
_______________________

Sub BBoxUpdate()

Dim NowRow As String
Dim LastRow As String

' Find end of used range
LastRow = Range("A65536").End(xlUp).Row

' Start at C1 and search down
Range("C1").Select
NowRow = ActiveCell.Row

Do While NowRow <= LastRow

' If cell has "X", delete row
If ActiveCell.Value < "" Then
ActiveCell.EntireRow.Delete
' and update LastRow
LastRow = Range("A65536").End(xlUp).Row
Else ' Drop one row
ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Select
NowRow = ActiveCell.Row ' update variable
End If

Loop

End Sub





Neil Eves[_2_]

Loop hits Row 8 and goes to End Sub??
 
You might want to change String to Long

Dim NowRow As Long
Dim LastRow As Long

Neil

"Tom Ogilvy" wrote in message
...
Sub BBoxUpdate()

Dim NowRow As String
Dim LastRow As String

' Find end of used range
LastRow = Range("A65536").End(xlUp).Row

' Start at last row and search up

for NowRow = LastRow to 1
' If cell has "X", delete row
If cells(NowRow,3).Value < "" Then
Cells(NowRow,3).EntireRow.Delete
End If
Next
End Sub

--
Regards,
Tom Ogilvy

"Ed" wrote in message
...
This workbook contains three columns - column C is an occasional "X"
inserted by another macro. A macro is supposed to run down Col C and

delete
any row containing "X". It works fine, skipping past blank rows and
deleting X'ed rows - until it processes Row 8, that is.

I just stepped through this *again* looking at variable values after

each
step. NowRow was 7, LastRow was 76, C was blank. The macro Offset one

row
as programmed, updated NowRow to 8, went to Loop, AND THEN WENT TO END

SUB!
Fourth time in a row! Can someone drop-kick me in the direction of

"WHY?!?"

Ed
_______________________

Sub BBoxUpdate()

Dim NowRow As String
Dim LastRow As String

' Find end of used range
LastRow = Range("A65536").End(xlUp).Row

' Start at C1 and search down
Range("C1").Select
NowRow = ActiveCell.Row

Do While NowRow <= LastRow

' If cell has "X", delete row
If ActiveCell.Value < "" Then
ActiveCell.EntireRow.Delete
' and update LastRow
LastRow = Range("A65536").End(xlUp).Row
Else ' Drop one row
ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Select
NowRow = ActiveCell.Row ' update variable
End If

Loop

End Sub







Tom Ogilvy

Loop hits Row 8 and goes to End Sub??
 
Whoops, forgot the step -1

for NowRow = LastRow to 1
should be

for NowRow = LastRow to 1 Step -1

--
Regards,
Tom Ogilvy

"Tom Ogilvy" wrote in message
...
Sub BBoxUpdate()

Dim NowRow As String
Dim LastRow As String

' Find end of used range
LastRow = Range("A65536").End(xlUp).Row

' Start at last row and search up

for NowRow = LastRow to 1
' If cell has "X", delete row
If cells(NowRow,3).Value < "" Then
Cells(NowRow,3).EntireRow.Delete
End If
Next
End Sub

--
Regards,
Tom Ogilvy

"Ed" wrote in message
...
This workbook contains three columns - column C is an occasional "X"
inserted by another macro. A macro is supposed to run down Col C and

delete
any row containing "X". It works fine, skipping past blank rows and
deleting X'ed rows - until it processes Row 8, that is.

I just stepped through this *again* looking at variable values after

each
step. NowRow was 7, LastRow was 76, C was blank. The macro Offset one

row
as programmed, updated NowRow to 8, went to Loop, AND THEN WENT TO END

SUB!
Fourth time in a row! Can someone drop-kick me in the direction of

"WHY?!?"

Ed
_______________________

Sub BBoxUpdate()

Dim NowRow As String
Dim LastRow As String

' Find end of used range
LastRow = Range("A65536").End(xlUp).Row

' Start at C1 and search down
Range("C1").Select
NowRow = ActiveCell.Row

Do While NowRow <= LastRow

' If cell has "X", delete row
If ActiveCell.Value < "" Then
ActiveCell.EntireRow.Delete
' and update LastRow
LastRow = Range("A65536").End(xlUp).Row
Else ' Drop one row
ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Select
NowRow = ActiveCell.Row ' update variable
End If

Loop

End Sub







Ed[_9_]

Loop hits Row 8 and goes to End Sub??
 
Thanks, Tom. I'm assuming that, since I was deleting rows that were being
counted, I was confusing the macro? Or something like that?

Ed

"Tom Ogilvy" wrote in message
...
Sub BBoxUpdate()

Dim NowRow As String
Dim LastRow As String

' Find end of used range
LastRow = Range("A65536").End(xlUp).Row

' Start at last row and search up

for NowRow = LastRow to 1
' If cell has "X", delete row
If cells(NowRow,3).Value < "" Then
Cells(NowRow,3).EntireRow.Delete
End If
Next
End Sub

--
Regards,
Tom Ogilvy

"Ed" wrote in message
...
This workbook contains three columns - column C is an occasional "X"
inserted by another macro. A macro is supposed to run down Col C and

delete
any row containing "X". It works fine, skipping past blank rows and
deleting X'ed rows - until it processes Row 8, that is.

I just stepped through this *again* looking at variable values after

each
step. NowRow was 7, LastRow was 76, C was blank. The macro Offset one

row
as programmed, updated NowRow to 8, went to Loop, AND THEN WENT TO END

SUB!
Fourth time in a row! Can someone drop-kick me in the direction of

"WHY?!?"

Ed
_______________________

Sub BBoxUpdate()

Dim NowRow As String
Dim LastRow As String

' Find end of used range
LastRow = Range("A65536").End(xlUp).Row

' Start at C1 and search down
Range("C1").Select
NowRow = ActiveCell.Row

Do While NowRow <= LastRow

' If cell has "X", delete row
If ActiveCell.Value < "" Then
ActiveCell.EntireRow.Delete
' and update LastRow
LastRow = Range("A65536").End(xlUp).Row
Else ' Drop one row
ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Select
NowRow = ActiveCell.Row ' update variable
End If

Loop

End Sub







Ed[_9_]

Loop hits Row 8 and goes to End Sub??
 
Thanks for the assist, Steve. I appreciate the time.

Ed

"steve" wrote in message
...
Ed,

Try it this way:

Sub BBoxUpdate()

Dim x as Long
Dim LastRow As Long

' prevent screen flicker and make code faster
Application.ScreenUpdating = False

' Find end of used range
LastRow = Range("A65536").End(xlUp).Row

' Start at end of range and work up
For x = 1 to LastRow step -1
' If cell has "X", delete row
If LCase(Cells(x,3)) = "x" Then ' LCase to catch x or X
Rows(x).Delete
End If
Next


Application.ScreenUpdating = True
End Sub

Also you declared NowRow and LastRow as Strings. They would work
better as Long since they are numbers.
--
sb
"Ed" wrote in message
...
This workbook contains three columns - column C is an occasional "X"
inserted by another macro. A macro is supposed to run down Col C and

delete
any row containing "X". It works fine, skipping past blank rows and
deleting X'ed rows - until it processes Row 8, that is.

I just stepped through this *again* looking at variable values after

each
step. NowRow was 7, LastRow was 76, C was blank. The macro Offset one

row
as programmed, updated NowRow to 8, went to Loop, AND THEN WENT TO END

SUB!
Fourth time in a row! Can someone drop-kick me in the direction of

"WHY?!?"

Ed
_______________________

Sub BBoxUpdate()

Dim NowRow As String
Dim LastRow As String

' Find end of used range
LastRow = Range("A65536").End(xlUp).Row

' Start at C1 and search down
Range("C1").Select
NowRow = ActiveCell.Row

Do While NowRow <= LastRow

' If cell has "X", delete row
If ActiveCell.Value < "" Then
ActiveCell.EntireRow.Delete
' and update LastRow
LastRow = Range("A65536").End(xlUp).Row
Else ' Drop one row
ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Select
NowRow = ActiveCell.Row ' update variable
End If

Loop

End Sub







Ed[_9_]

Loop hits Row 8 and goes to End Sub??
 
Tom, I tried it, but it wouldn't go anywhere. But I did use your idea of
going to the bottom and moving up, rather than from the top down. So I
changed my code to Offset -1, and Do Until NowRow = 1, and it works okay. I
don;t know why yours wouldn't go.

Thanks for helping. I appreciate it.

Ed

"Tom Ogilvy" wrote in message
...
Sub BBoxUpdate()

Dim NowRow As String
Dim LastRow As String

' Find end of used range
LastRow = Range("A65536").End(xlUp).Row

' Start at last row and search up

for NowRow = LastRow to 1
' If cell has "X", delete row
If cells(NowRow,3).Value < "" Then
Cells(NowRow,3).EntireRow.Delete
End If
Next
End Sub

--
Regards,
Tom Ogilvy

"Ed" wrote in message
...
This workbook contains three columns - column C is an occasional "X"
inserted by another macro. A macro is supposed to run down Col C and

delete
any row containing "X". It works fine, skipping past blank rows and
deleting X'ed rows - until it processes Row 8, that is.

I just stepped through this *again* looking at variable values after

each
step. NowRow was 7, LastRow was 76, C was blank. The macro Offset one

row
as programmed, updated NowRow to 8, went to Loop, AND THEN WENT TO END

SUB!
Fourth time in a row! Can someone drop-kick me in the direction of

"WHY?!?"

Ed
_______________________

Sub BBoxUpdate()

Dim NowRow As String
Dim LastRow As String

' Find end of used range
LastRow = Range("A65536").End(xlUp).Row

' Start at C1 and search down
Range("C1").Select
NowRow = ActiveCell.Row

Do While NowRow <= LastRow

' If cell has "X", delete row
If ActiveCell.Value < "" Then
ActiveCell.EntireRow.Delete
' and update LastRow
LastRow = Range("A65536").End(xlUp).Row
Else ' Drop one row
ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Select
NowRow = ActiveCell.Row ' update variable
End If

Loop

End Sub







Tom Ogilvy

Loop hits Row 8 and goes to End Sub??
 
Because I left out the Step -1 on the end of the loop - see my correction

--
Regards,
Tom Ogilvy

"Ed" wrote in message
...
Tom, I tried it, but it wouldn't go anywhere. But I did use your idea of
going to the bottom and moving up, rather than from the top down. So I
changed my code to Offset -1, and Do Until NowRow = 1, and it works okay.

I
don;t know why yours wouldn't go.

Thanks for helping. I appreciate it.

Ed

"Tom Ogilvy" wrote in message
...
Sub BBoxUpdate()

Dim NowRow As String
Dim LastRow As String

' Find end of used range
LastRow = Range("A65536").End(xlUp).Row

' Start at last row and search up

for NowRow = LastRow to 1
' If cell has "X", delete row
If cells(NowRow,3).Value < "" Then
Cells(NowRow,3).EntireRow.Delete
End If
Next
End Sub

--
Regards,
Tom Ogilvy

"Ed" wrote in message
...
This workbook contains three columns - column C is an occasional "X"
inserted by another macro. A macro is supposed to run down Col C and

delete
any row containing "X". It works fine, skipping past blank rows and
deleting X'ed rows - until it processes Row 8, that is.

I just stepped through this *again* looking at variable values after

each
step. NowRow was 7, LastRow was 76, C was blank. The macro Offset

one
row
as programmed, updated NowRow to 8, went to Loop, AND THEN WENT TO END

SUB!
Fourth time in a row! Can someone drop-kick me in the direction of

"WHY?!?"

Ed
_______________________

Sub BBoxUpdate()

Dim NowRow As String
Dim LastRow As String

' Find end of used range
LastRow = Range("A65536").End(xlUp).Row

' Start at C1 and search down
Range("C1").Select
NowRow = ActiveCell.Row

Do While NowRow <= LastRow

' If cell has "X", delete row
If ActiveCell.Value < "" Then
ActiveCell.EntireRow.Delete
' and update LastRow
LastRow = Range("A65536").End(xlUp).Row
Else ' Drop one row
ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Select
NowRow = ActiveCell.Row ' update variable
End If

Loop

End Sub









Ed[_9_]

Loop hits Row 8 and goes to End Sub??
 
I made the correction and it worked great!

At first, I was wondering how NowRow would go from LastRow to 1 if NowRow
was never updated in the code somewhere (Activecell.Row). Then I read the
Help files on Step and For ... Next loops, and found where the counter is
automatically incremented by the step value. That's going to help me
greatly next time I write one of these things.

Many thanks, Tom.
Ed

"Tom Ogilvy" wrote in message
...
Because I left out the Step -1 on the end of the loop - see my

correction

--
Regards,
Tom Ogilvy

"Ed" wrote in message
...
Tom, I tried it, but it wouldn't go anywhere. But I did use your idea

of
going to the bottom and moving up, rather than from the top down. So I
changed my code to Offset -1, and Do Until NowRow = 1, and it works

okay.
I
don;t know why yours wouldn't go.

Thanks for helping. I appreciate it.

Ed

"Tom Ogilvy" wrote in message
...
Sub BBoxUpdate()

Dim NowRow As String
Dim LastRow As String

' Find end of used range
LastRow = Range("A65536").End(xlUp).Row

' Start at last row and search up

for NowRow = LastRow to 1
' If cell has "X", delete row
If cells(NowRow,3).Value < "" Then
Cells(NowRow,3).EntireRow.Delete
End If
Next
End Sub

--
Regards,
Tom Ogilvy

"Ed" wrote in message
...
This workbook contains three columns - column C is an occasional "X"
inserted by another macro. A macro is supposed to run down Col C

and
delete
any row containing "X". It works fine, skipping past blank rows and
deleting X'ed rows - until it processes Row 8, that is.

I just stepped through this *again* looking at variable values after

each
step. NowRow was 7, LastRow was 76, C was blank. The macro Offset

one
row
as programmed, updated NowRow to 8, went to Loop, AND THEN WENT TO

END
SUB!
Fourth time in a row! Can someone drop-kick me in the direction of
"WHY?!?"

Ed
_______________________

Sub BBoxUpdate()

Dim NowRow As String
Dim LastRow As String

' Find end of used range
LastRow = Range("A65536").End(xlUp).Row

' Start at C1 and search down
Range("C1").Select
NowRow = ActiveCell.Row

Do While NowRow <= LastRow

' If cell has "X", delete row
If ActiveCell.Value < "" Then
ActiveCell.EntireRow.Delete
' and update LastRow
LastRow = Range("A65536").End(xlUp).Row
Else ' Drop one row
ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Select
NowRow = ActiveCell.Row ' update variable
End If

Loop

End Sub












All times are GMT +1. The time now is 09:22 PM.

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