ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Code does a continous loop (https://www.excelbanter.com/excel-programming/336735-code-does-continous-loop.html)

L. Howard Kittle

Code does a continous loop
 
Hello Excel users and experts,
Excel 2002

In the first If statement when i = 11 it statement works fine as long as I
have ' Target.Value = "" out of the code.
If I remove the ' from Target.Value = "" and run the macro it goes ino a
continous loop with the message box displayed. I have to crash out with
Ctrl -Alt - Del. Am I looking right past something?

Thanks for any help you can offer.
Regards,
Howard

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer

i = Application.WorksheetFunction. _
CountA(Worksheets("Sales Order") _
.Range("A17:A27"))

If i = 11 Then
MsgBox "The sales order is full." & vbCr _
& vbCr & "Process a new order."
' Target.Value = ""
Application.DisplayAlerts = False
Exit Sub
End If

If Target.Column < 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
Target.Resize(1, 4).Select
If MsgBox(prompt:=" Post this selection to Order Sheet?", _
Buttons:=vbYesNo, _
Title:="Poster") = vbYes Then
Target.Resize(1, 4).Copy _
Sheets("Sales Order").Range("A27") _
.End(xlUp).Offset(1, 0)
Target.Value = ""
Application.DisplayAlerts = False
ElseIf vbNo Then
Target.Value = ""
Application.DisplayAlerts = False
End If
Target.Select

End Sub



L. Howard Kittle

Code does a continous loop
 
Well, DUH!

It just hit me. I moved these two exit sub lines to the top of the code and
all is fine.

If Target.Column < 1 Then Exit Sub
If Target.Value = "" Then Exit Sub

Sorry for taking up space and time.

Regards,
Howard

"L. Howard Kittle" wrote in message
...
Hello Excel users and experts,
Excel 2002

In the first If statement when i = 11 it statement works fine as long as I
have ' Target.Value = "" out of the code.
If I remove the ' from Target.Value = "" and run the macro it goes ino a
continous loop with the message box displayed. I have to crash out with
Ctrl -Alt - Del. Am I looking right past something?

Thanks for any help you can offer.
Regards,
Howard

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer

i = Application.WorksheetFunction. _
CountA(Worksheets("Sales Order") _
.Range("A17:A27"))

If i = 11 Then
MsgBox "The sales order is full." & vbCr _
& vbCr & "Process a new order."
' Target.Value = ""
Application.DisplayAlerts = False
Exit Sub
End If

If Target.Column < 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
Target.Resize(1, 4).Select
If MsgBox(prompt:=" Post this selection to Order Sheet?", _
Buttons:=vbYesNo, _
Title:="Poster") = vbYes Then
Target.Resize(1, 4).Copy _
Sheets("Sales Order").Range("A27") _
.End(xlUp).Offset(1, 0)
Target.Value = ""
Application.DisplayAlerts = False
ElseIf vbNo Then
Target.Value = ""
Application.DisplayAlerts = False
End If
Target.Select

End Sub




Jim Thomlinson[_4_]

Code does a continous loop
 
You have a recursive call when you change the Target.value you call the
change function again and round round you go... You need to temporarily
disable the events somehtning like this (As with all application level
setting it is best to add an error handler to restore them in case of a
crash)...

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
on error goto errorhandler
application.enableevents = false

i = Application.WorksheetFunction. _
CountA(Worksheets("Sales Order") _
.Range("A17:A27"))

If i = 11 Then
MsgBox "The sales order is full." & vbCr _
& vbCr & "Process a new order."
' Target.Value = ""
Application.DisplayAlerts = False
Exit Sub
End If

If Target.Column < 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
Target.Resize(1, 4).Select
If MsgBox(prompt:=" Post this selection to Order Sheet?", _
Buttons:=vbYesNo, _
Title:="Poster") = vbYes Then
Target.Resize(1, 4).Copy _
Sheets("Sales Order").Range("A27") _
.End(xlUp).Offset(1, 0)
Target.Value = ""
Application.DisplayAlerts = False
ElseIf vbNo Then
Target.Value = ""
Application.DisplayAlerts = False
End If
Target.Select

ErrorHandler:
application.enableevents = true
application.displayalerts = true
End Sub

--
HTH...

Jim Thomlinson


"L. Howard Kittle" wrote:

Hello Excel users and experts,
Excel 2002

In the first If statement when i = 11 it statement works fine as long as I
have ' Target.Value = "" out of the code.
If I remove the ' from Target.Value = "" and run the macro it goes ino a
continous loop with the message box displayed. I have to crash out with
Ctrl -Alt - Del. Am I looking right past something?

Thanks for any help you can offer.
Regards,
Howard

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer

i = Application.WorksheetFunction. _
CountA(Worksheets("Sales Order") _
.Range("A17:A27"))

If i = 11 Then
MsgBox "The sales order is full." & vbCr _
& vbCr & "Process a new order."
' Target.Value = ""
Application.DisplayAlerts = False
Exit Sub
End If

If Target.Column < 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
Target.Resize(1, 4).Select
If MsgBox(prompt:=" Post this selection to Order Sheet?", _
Buttons:=vbYesNo, _
Title:="Poster") = vbYes Then
Target.Resize(1, 4).Copy _
Sheets("Sales Order").Range("A27") _
.End(xlUp).Offset(1, 0)
Target.Value = ""
Application.DisplayAlerts = False
ElseIf vbNo Then
Target.Value = ""
Application.DisplayAlerts = False
End If
Target.Select

End Sub




L. Howard Kittle

Code does a continous loop
 
Hi Jim,

Thanks for the info. Can you give me an example of an error handler for
this code? I'm pretty foggy on error handling.

Regards,
Howard

"L. Howard Kittle" wrote in message
...
Hello Excel users and experts,
Excel 2002

In the first If statement when i = 11 it statement works fine as long as I
have ' Target.Value = "" out of the code.
If I remove the ' from Target.Value = "" and run the macro it goes ino a
continous loop with the message box displayed. I have to crash out with
Ctrl -Alt - Del. Am I looking right past something?

Thanks for any help you can offer.
Regards,
Howard

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer

i = Application.WorksheetFunction. _
CountA(Worksheets("Sales Order") _
.Range("A17:A27"))

If i = 11 Then
MsgBox "The sales order is full." & vbCr _
& vbCr & "Process a new order."
' Target.Value = ""
Application.DisplayAlerts = False
Exit Sub
End If

If Target.Column < 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
Target.Resize(1, 4).Select
If MsgBox(prompt:=" Post this selection to Order Sheet?", _
Buttons:=vbYesNo, _
Title:="Poster") = vbYes Then
Target.Resize(1, 4).Copy _
Sheets("Sales Order").Range("A27") _
.End(xlUp).Offset(1, 0)
Target.Value = ""
Application.DisplayAlerts = False
ElseIf vbNo Then
Target.Value = ""
Application.DisplayAlerts = False
End If
Target.Select

End Sub




L. Howard Kittle

Code does a continous loop
 
OK, yet one more DUH!!!

Failed to grasp the first response.

Regards,
Howard


"L. Howard Kittle" wrote in message
...
Hello Excel users and experts,
Excel 2002

In the first If statement when i = 11 it statement works fine as long as I
have ' Target.Value = "" out of the code.
If I remove the ' from Target.Value = "" and run the macro it goes ino a
continous loop with the message box displayed. I have to crash out with
Ctrl -Alt - Del. Am I looking right past something?

Thanks for any help you can offer.
Regards,
Howard

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer

i = Application.WorksheetFunction. _
CountA(Worksheets("Sales Order") _
.Range("A17:A27"))

If i = 11 Then
MsgBox "The sales order is full." & vbCr _
& vbCr & "Process a new order."
' Target.Value = ""
Application.DisplayAlerts = False
Exit Sub
End If

If Target.Column < 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
Target.Resize(1, 4).Select
If MsgBox(prompt:=" Post this selection to Order Sheet?", _
Buttons:=vbYesNo, _
Title:="Poster") = vbYes Then
Target.Resize(1, 4).Copy _
Sheets("Sales Order").Range("A27") _
.End(xlUp).Offset(1, 0)
Target.Value = ""
Application.DisplayAlerts = False
ElseIf vbNo Then
Target.Value = ""
Application.DisplayAlerts = False
End If
Target.Select

End Sub





All times are GMT +1. The time now is 12:20 PM.

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