Introduction.
Allow data entry or editing for a certain period of time otherwise lock the form for data view alone. The reason to do this may be time-bound work schedules or some other reason. Request for a solution to this kind of action was raised in a Microsoft Access Discussion Forum on the web and I thought I will give it a try and write a program to enable the form for Data Entry/Edit between 06:00 to 07:00 Hours, 11:00 to 13:00 Hours and 17:00 to 19:00 Hours otherwise disable the form and allow only data view mode.
The Data Entry Control Function.
The function written for this task is given below, copy it into the Standard Module:
Public Function Data_Entry(ByVal frmName As String) Dim T1S, T1E, T2S, T2E, T3S, T3E Dim frm As Form Set frm = Forms(frmName) D = Date T1S = TimeValue("06:00:00") T1E = TimeValue("07:00:00") T2S = TimeValue("11:00:00") T2E = TimeValue("13:00:00") T3S = TimeValue("17:00:00") T3E = TimeValue("19:00:00") Select Case time Case T1S To T1E, T2S To T2E, T3S To T3E With frm If .AllowAdditions = False Then .AllowAdditions = True .AllowEdits = True .lblMsg.Visible = False 'change .subFrmName to match the control (window) name of the sub-form .subFrmName.Enabled = True End If End With frm.Refresh Case Else With frm If .AllowAdditions = True Then .AllowAdditions = False .AllowEdits = False .lblMsg.Visible = True 'change the next line to set focus on any field on the main form .EmployeeID.SetFocus 'change .subFrmName to match the control (window) name of the sub-form .subFrmName.Enabled = False End If End With frm.Refresh End Select Set frm = Nothing End Function
NB: You must make changes wherever applicable to point the code to correct control names on your Form, which I have marked with comments.
Some Changes to the Form.
Open your Form in Design View.
Add a Label control on the main Form where you want to display 'Entry not allowed', change the Name property value to lblMsg, and write the message in the Caption property.
Display the Form Property Sheet.
Set Timer Interval value to 60000 (i.e. 1 minute). The Form’s current mode is checked at a one-minute interval and applies changes automatically. You may increase the time interval by adding 1000 to the above value for each second increase.
Select the On-Timer() Event, select [Event Procedure] from the drop-down control and click on the build ( . . .) Button to open the VBA module.
Copy and Paste the following lines of Code replacing the existing two lines displayed there:
Code:
Private Sub Form_Timer() Data_Entry Me.Name End Sub
Save and Close the Form.
Tracking the Time for Form Mode Change.
The Timer setting will run the above program and will check every minute, whether the current time falls within the time slots given in the program, if true, then the Main-form and a Sub-Form on the main form will be enabled for Editing/Entry purposes, otherwise, they will be locked.
When you open the Form there will be a one-minute delay before Access starts checking. You may call the Data_Entry() function from the Form_Current() event procedure to start checking immediately after opening to avoid the one-minute initial delay.