Solved

Undo Control Not working

Posted on 2010-11-15
20
387 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
  • 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 167 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
Comprehensive Backup Solutions for Microsoft

Acronis protects the complete Microsoft technology stack: Windows Server, Windows PC, laptop and Surface data; Microsoft business applications; Microsoft Hyper-V; Azure VMs; Microsoft Windows Server 2016; Microsoft Exchange 2016 and SQL Server 2016.

 
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 47

Assisted Solution

by:Dale Fye (Access MVP)
Dale Fye (Access MVP) earned 167 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 47

Expert Comment

by:Dale Fye (Access MVP)
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 166 total points
ID: 34142583
Here is an example that works when using the Validation Rule. Validation Rule Property
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Experts-Exchange is a great place to come for help with solutions for your database issues, and many problems are resolved within minutes of being posted.  Others take a little more time and effort and often providing a sample database is very helpf…
It’s the first day of March, the weather is starting to warm up and the excitement of the upcoming St. Patrick’s Day holiday can be felt throughout the world.
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…

685 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