Worcse
asked on
Pause Button
I have code which loops through a customer database table and emails each customer via Outlook 07.
This code is fired from a form with a command button.
Is there anyway I can manually pause this code (either by clicking a command button or perhaps a keystroke) and then resume the code at the point it stopped?
~Worcse
This code is fired from a form with a command button.
Is there anyway I can manually pause this code (either by clicking a command button or perhaps a keystroke) and then resume the code at the point it stopped?
~Worcse
you can also set a hard breakpoint using "Stop" it will pause execution and could be programmed to your button
ASKER
BlueDevilFan -
Thank you for the response. What I am looking for is a way (if possible) to pause the code after it has fired.
If my table contains 3000 emails and I fire the code... it starts the looping and email process. Lets say that after a random number of loops I want to pause the code.... is this possible?
Thank you for the response. What I am looking for is a way (if possible) to pause the code after it has fired.
If my table contains 3000 emails and I fire the code... it starts the looping and email process. Lets say that after a random number of loops I want to pause the code.... is this possible?
yes set a counter and use "stop" when appropriate
ASKER
cmrobertson -
Thank you... could you give me a little more in-depth information behind you answer?
Thank you... could you give me a little more in-depth information behind you answer?
yes, but what would you want to do during the pause?
I would probably do something like add another button to the form (call it cmd_Pause_Resume). I would set its Caption to "Pause" and the Tag property to -1.
When you click the button to start this email process, I woud enable cmd_Pause_Resume, and the Click event of this button would look like:
Private sub cmd_Pause_Resume_Click
Me.cmd_Pause_Resume.Tag = Not Me.cmd_Pause_Resume.Tag
Me.cmd_Pause_Resume.Captio n = IIf(Me.cmd_Pause_Resume.Ta g = 0, "&Resume", "&Pause")
if me.cmd_Pause_Resume.Tag = - 1 then Call SendEmail(False)
End Sub
In the code module that actually sends your email, I would add a declaration to indicate whether you are starting this process from scratch or resuming. It might look like below.
Public Sub SendEmail(Optional Reset as Boolean = True)
With this declaration statement, you can tell the function whether to reset the static variable described below.
If Reset then lngAbsRec = 0
I would also insert a line in the declaration section of this same code module which sends your email. This line would declare a static variable (lngAbsRec) which will be used to determine what record to start on if you resume the email process.
Static lngAbsRec as Long
At the bottom of your loop, I would add a line of code that checks the Tag property of cmd_Pause_Resume. If the Tag property changes to 0, the I would exit the loop and close the recordset. In total, that code module would look something like:
Public Sub SendEmail(Optional Reset as Boolean = True)
Static lngAbsRec as Long
Dim strSQL as string
strSQL = "SELECT [email] from [your table]"
Set rs = currentdb.openrecordset (strsql,, dbfailonerror)
'If you are resuming the process, skip to the next record in the recordset
if Reset = False AND lngAbsRec > 0 Then
docmd.GoToRecord ,,acGoTo, lngAbsRec + 1
End if
'Loop through the records in the recordset
Do while not rs.eof
'send your email here
lngAbsRec = rs.absolutePosition
if me.cmd_Pause_Resume.Tag = 0 then Exit Do
rs.movenext
Loop
rs.close
set rs = nothing
End Sub
Hope this helps.
Dale
I would probably do something like add another button to the form (call it cmd_Pause_Resume). I would set its Caption to "Pause" and the Tag property to -1.
When you click the button to start this email process, I woud enable cmd_Pause_Resume, and the Click event of this button would look like:
Private sub cmd_Pause_Resume_Click
Me.cmd_Pause_Resume.Tag = Not Me.cmd_Pause_Resume.Tag
Me.cmd_Pause_Resume.Captio
if me.cmd_Pause_Resume.Tag = - 1 then Call SendEmail(False)
End Sub
In the code module that actually sends your email, I would add a declaration to indicate whether you are starting this process from scratch or resuming. It might look like below.
Public Sub SendEmail(Optional Reset as Boolean = True)
With this declaration statement, you can tell the function whether to reset the static variable described below.
If Reset then lngAbsRec = 0
I would also insert a line in the declaration section of this same code module which sends your email. This line would declare a static variable (lngAbsRec) which will be used to determine what record to start on if you resume the email process.
Static lngAbsRec as Long
At the bottom of your loop, I would add a line of code that checks the Tag property of cmd_Pause_Resume. If the Tag property changes to 0, the I would exit the loop and close the recordset. In total, that code module would look something like:
Public Sub SendEmail(Optional Reset as Boolean = True)
Static lngAbsRec as Long
Dim strSQL as string
strSQL = "SELECT [email] from [your table]"
Set rs = currentdb.openrecordset (strsql,, dbfailonerror)
'If you are resuming the process, skip to the next record in the recordset
if Reset = False AND lngAbsRec > 0 Then
docmd.GoToRecord ,,acGoTo, lngAbsRec + 1
End if
'Loop through the records in the recordset
Do while not rs.eof
'send your email here
lngAbsRec = rs.absolutePosition
if me.cmd_Pause_Resume.Tag = 0 then Exit Do
rs.movenext
Loop
rs.close
set rs = nothing
End Sub
Hope this helps.
Dale
If you use the command "Stop" it is just like setting a break point in code, the major difference being it is saved when you close and reopen your project, so yoiu could say:
ictr = 0
Do for whatever your condition is
ictr = ictr + 1
if ictr = 100 then
stop
endif
loop
ictr = 0
Do for whatever your condition is
ictr = ictr + 1
if ictr = 100 then
stop
endif
loop
See sample attached.
All you would need to do is modify the SendMail subroutine to open your recordset that contains email addresses.
PauseLoop.accdb
All you would need to do is modify the SendMail subroutine to open your recordset that contains email addresses.
PauseLoop.accdb
ASKER
So sorry for the delay ~ Family... can't live with em - cant' give em away
fyed: your suggestion looks like a possible solution... unfortunately, my parameters have changed so I don't know if I will need to open a new question or if I can continue with this one. I guess the EE gods will let me know.
What I need to accomplish is for my code to loop through and email the first 200 emails in my table
I then need a 15 minute pause
Then I need to email the next 200 emails in the table
And then pause for 15 minutes.... until EOF
How would I accomplish this...?
fyed: your suggestion looks like a possible solution... unfortunately, my parameters have changed so I don't know if I will need to open a new question or if I can continue with this one. I guess the EE gods will let me know.
What I need to accomplish is for my code to loop through and email the first 200 emails in my table
I then need a 15 minute pause
Then I need to email the next 200 emails in the table
And then pause for 15 minutes.... until EOF
How would I accomplish this...?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
fyed ~
Sorry for my delay in getting back to you.
Your suggestion/answer was spot on...!!!
U Da Man
Thank your again for your help.
worcse~
Sorry for my delay in getting back to you.
Your suggestion/answer was spot on...!!!
U Da Man
Thank your again for your help.
worcse~
You can set a breakpoint in the code. that will pause execution at that point until you tell it to resume. To set a breakpoint, open the code editor. click on the line you want to break on, and press F9. The line will turn red.