?
Solved

Undo Control Not working

Posted on 2010-11-15
20
Medium Priority
?
404 Views
Last Modified: 2012-05-10
I am trying to put some code on a date field, so that a date in the future cannot be accidentally typed in. If the date is in the future, I want a message box to appear, and the control to be cleared for a new (correct) date entered. The message box pops up, but the control doesn't clear. Any suggestions?


Private Sub InvoiceDate_BeforeUpdate(Cancel As Integer)

If Me.InvoiceDate > Now() Then
MsgBox "Invoice Date Cannot be in the future. Please adjust."
Me!InvoiceDate.Undo

End If

End Sub
0
Comment
Question by:4charity
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 10
  • 5
  • 3
  • +1
20 Comments
 
LVL 75
ID: 34139481
Is this a Bound control?  If not, UnDo only works on Bound controls.

mx
0
 

Author Comment

by:4charity
ID: 34139500
Yes, it is bound to a field in the underlying table.
0
 
LVL 75

Accepted Solution

by:
DatabaseMX (Joe Anderson - Microsoft MVP, Access and Data Platform) earned 668 total points
ID: 34139503
Also, I would suggest (if Bound)


Private Sub InvoiceDate_BeforeUpdate(Cancel As Integer)

If Me.InvoiceDate > Now() Then
MsgBox "Invoice Date Cannot be in the future. Please adjust."
Cancel = True ' Add this ***********
Me!InvoiceDate.Undo

End If

End Sub

Also, you are comparing against Now() , which includes Time ... are you aware of that?

Maybe it needs to be

If Me.InvoiceDate > Date() Then

mx
0
Back Up Your Microsoft Windows Server®

Back up all your Microsoft Windows Server – on-premises, in remote locations, in private and hybrid clouds. Your entire Windows Server will be backed up in one easy step with patented, block-level disk imaging. We achieve RTOs (recovery time objectives) as low as 15 seconds.

 
LVL 75
ID: 34139514
Bound ... ok:


Private Sub InvoiceDate_BeforeUpdate(Cancel As Integer)

If Me.InvoiceDate > Date() Then    ' *** compare against Date()
MsgBox "Invoice Date Cannot be in the future. Please adjust."
    Cancel = True ' Add this ***********
    Me!InvoiceDate.Undo

End If

End Sub
0
 

Author Comment

by:4charity
ID: 34139530
OK - I added the Cancel line and switched to Date instead of Now.
Still doesn't undo.
0
 
LVL 48

Assisted Solution

by:Dale Fye
Dale Fye earned 668 total points
ID: 34139537

If you are going  to use BeforeUpdate, then  try this:

Private Sub InvoiceDate_BeforeUpdate(Cancel As Integer)

    If Me.InvoiceDate > Now() Then
        MsgBox "Invoice Date Cannot be in the future. Please adjust."
        Cancel = true
    End If

End

0
 

Author Comment

by:4charity
ID: 34139541
If Me.InvoiceDate > Date Then
MsgBox "Invoice Date Cannot be in the future. Please adjust."
Cancel = True
Me!InvoiceDate.Undo

End If
0
 
LVL 75
ID: 34139561
Does Me.InvoiceDate include Time?
Is InvoiceDate bound to a real Date/Time data type ?

0
 
LVL 75
ID: 34139575
Are you getting the Message box prompt ?

mx
0
 

Author Comment

by:4charity
ID: 34139581
Yes.

This works:

If Me.InvoiceDate > Date Then
MsgBox "Invoice Date Cannot be in the future. Please adjust."
Cancel = True
Me!InvoiceDate.Undo
Undo
End If
0
 
LVL 48

Expert Comment

by:Dale Fye
ID: 34139616
Charity,

You should not need the Undo line, and it may cause an undo for the entire record, not just for the current control.

Dale
0
 
LVL 75
ID: 34139626
But  Undo will undo the entire form ... ?

I see this form time to time ... Me.someControl.Undo just flat ass does not work ... not sure why.

mx
0
 
LVL 75
ID: 34139659
Sometimes reversing makes it work:

If Me.InvoiceDate > Date Then
MsgBox "Invoice Date Cannot be in the future. Please adjust."
Me!InvoiceDate.Undo
Cancel = True
End If
0
 

Author Comment

by:4charity
ID: 34139848
In checking for it to work, you have to make sure you really change the date alot, so that you realize it went back to the previous date, not a null field. this does work:

If Me.InvoiceDate > Date Then
MsgBox "Invoice Date Cannot be in the future. Please adjust."
Cancel = True
Me!InvoiceDate.Undo
End If
0
 
LVL 75
ID: 34139873
That almost always works ... unless something really weird is going on.

mx
0
 
LVL 8

Expert Comment

by:Emil_Gray
ID: 34141444
This should be done as an AfterUpdate action.

Private Sub InvoiceDate__AfterUpdate()

If Me.InvoiceDate > Date Then
MsgBox "Invoice date cannot be in the future. Please adjust.
Me.InvoiceDate = Null
Me.Refresh
End If

End Sub
0
 
LVL 75
ID: 34142296
Well, AfterUpdate is After the Fact ... control has already be updated.  That's why it's called "After' Update.  The correct event for any validation is the Before Update event, either at the Control level or Form level.

mx
0
 
LVL 8

Expert Comment

by:Emil_Gray
ID: 34142523
DatabaseMX, you're right. That is the best way but it appeared that he was having problems with the BeforeUpdate action so I just was suggesting an alternative solution. Another suggestion might be to use the Validation Rule as an input limiter.
0
 
LVL 75
ID: 34142539
I think she got it to work >> ". this does work"

mx
0
 
LVL 8

Assisted Solution

by:Emil_Gray
Emil_Gray earned 664 total points
ID: 34142583
Here is an example that works when using the Validation Rule. Validation Rule Property
0

Featured Post

Visualize your virtual and backup environments

Create well-organized and polished visualizations of your virtual and backup environments when planning VMware vSphere, Microsoft Hyper-V or Veeam deployments. It helps you to gain better visibility and valuable business insights.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In earlier versions of Windows (XP and before), you could drag a database to the taskbar, where it would appear as a taskbar icon to open that database.  This article shows how to recreate this functionality in Windows 7 through 10.
Did you know that more than 4 billion data records have been recorded as lost or stolen since 2013? It was a staggering number brought to our attention during last week’s ManageEngine webinar, where attendees received a comprehensive look at the ma…
Add bar graphs to Access queries using Unicode block characters. Graphs appear on every record in the color you want. Give life to numbers. Hopes this gives you ideas on visualizing your data in new ways ~ Create a calculated field in a query: …
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…
Suggested Courses

764 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question