Solved Null Value Verification

Emma35

Registered User.
Local time
Today, 14:48
Joined
Sep 18, 2012
Messages
497
Hi All,
I have a main form called frm_AddNewShift and a related subform called SubRecords. I want to be able to verify that the four controls on the main form have been populated before i allow access to the subform. I added the following code to the GotFocus event of the first control on the subform which is called SampleTime. I'm getting a syntax error but i don't know how to correct it ?. Is there a better way of doing this ?

Thanks

Code:
Private Sub SampleTime_GotFocus()
If IsNull [Forms]![frm_AddNewShift]![Block]
  MsgBox "You Must Enter a Block", vbCritical, "You forgot something..."
  Cancel = True
  Me.Parent.Block.SetFocus
  Exit Sub
End Sub
 
  • IsNull is a function. You must pass the value to check as argument to it: IsNull([Forms]![frm_AddNewShift]![Block])
  • Your If block is missing a Then and an End If
  • The token Cancel is not defined in your code. The GotFocus event happens after the control got (past tense!) the focus. So, it cannot be canceled because it happened already.
  • Exit Sub immediately before End Sub makes little sense but doesn't do any harm.
 
Hi All,
I have a main form called frm_AddNewShift and a related subform called SubRecords. I want to be able to verify that the four controls on the main form have been populated before i allow access to the subform. I added the following code to the GotFocus event of the first control on the subform which is called SampleTime. I'm getting a syntax error but i don't know how to correct it ?. Is there a better way of doing this ?

Thanks

Code:
Private Sub SampleTime_GotFocus()
If IsNull [Forms]![frm_AddNewShift]![Block]
  MsgBox "You Must Enter a Block", vbCritical, "You forgot something..."
  Cancel = True
  Me.Parent.Block.SetFocus
  Exit Sub
End Sub
Perhaps you could set the sub form as Not enabled. Then put your validation code in the Main forms Before Update event and in the Main forms On Current event
 
Therein lies the problem. Validation code belongs in the Form's BeforeUpdate event NOT EVER in the GotFocus event. The BeforeUpdate event is the last event that runs before the record gets saved and you get to cancel the save - that's what the Cancel = True is for but it only works in Events with a Cancel argument, if there are any errors found.

When you put your validation code in the correct event, you don't need work arounds.

In newer versions of Access, Access will not allow you to add records from the subform if the main form has not been populated and saved. If you want to add additional code because your version doesn't block this action, then the correct event to use is the subform's BeforeInsert event. This event runs as soon as any character is typed into the subform. Your code checks the value of the PK in the main form. If it is populated, then you can allow the event to continue. Otherwise, you cancel the event AND undo the typing.

Here's an example from one of my subforms:
Code:
Private Sub Form_BeforeInsert(Cancel As Integer)
    If Me.Parent!PersonID & "" = "" Then
        Cancel = True
        MsgBox "Please choose a person or create a new person record first.", vbOKOnly
        Me.Undo
        Me.Parent!cboFindPerson.SetFocus
        Exit Sub
    End If
End Sub
Thanks for the help Pat...the code worked perfectly. My knowledge of VBA is atrocious as you can see !
Do you know a good resource or YouTube channel where i could learn the basics even ?

Thanks everyone for the help and suggestions
Em x
 
Thanks Gasman....i think i'll give the Programming Made EZ one a try
 
Thanks for the help Pat...the code worked perfectly. My knowledge of VBA is atrocious as you can see !
Do you know a good resource or YouTube channel where i could learn the basics even ?

Thanks everyone for the help and suggestions
Em x
Here's a good presentation on data validation. ;)

 
Pat/George thank you both for the links. Someday i might surprise everyone and actually answer a question in the forum with my new VBA knowledge ;)
 
Someday i might surprise everyone and actually answer a question in the forum with my new VBA knowledge
If you really want to do it then buy a used copy of this book and read it. Some of the stuff is outdated and that may be a challenge to firgure out what not to bother with. But 90% is still relevant and will take you from novice to expert. That is what I did. Then answered a lot of posts. You learn by answering.
Here is a copy for $7 dollars.
 
Emma,
Late to the thread. I agree with advice you have been given. In addition, I have a list of articles and videos that I have "discovered" over a few years. You can access the list using the Database Planning and Design link in my signature.
 

Users who are viewing this thread

Back
Top Bottom