Solved

Undo Control Not working

Posted on 2010-11-15
20
392 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 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
Complete VMware vSphere® ESX(i) & Hyper-V Backup

Capture your entire system, including the host, with patented disk imaging integrated with VMware VADP / Microsoft VSS and RCT. RTOs is as low as 15 seconds with Acronis Active Restore™. You can enjoy unlimited P2V/V2V migrations from any source (even from a different hypervisor)

 
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

[Webinar] Code, Load, and Grow

Managing multiple websites, servers, applications, and security on a daily basis? Join us for a webinar on May 25th to learn how to simplify administration and management of virtual hosts for IT admins, create a secure environment, and deploy code more effectively and frequently.

Question has a verified solution.

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

You need to know the location of the Office templates folder, so that when you create new templates, they are saved to that location, and thus are available for selection when creating new documents.  The steps to find the Templates folder path are …
Access developers frequently have requirements to interact with Excel (import from or output to) in their applications.  You might be able to accomplish this with the TransferSpreadsheet and OutputTo methods, but in this series of articles I will di…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…
In Microsoft Access, learn how to use Dlookup and other domain aggregate functions and one method of specifying a string value within a string. Specify the first argument, which is the expression to be returned: Specify the second argument, which …

738 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