In addition to the comments by
@mike60smart , here are some more.
1. Using ID as the name for the PK of a table just causes confusion, use a meaningful name such as StaffID and then use the same name when you create the FK. It is ever so much easier to "see" the relationships if your naming standard is helpful.
2. Ditto the naming standards.
The only VALID characters in an object name or variable name are the letters a-z and A-Z, the numbers 0-9, and the underscore. Access is way more flexible than VBA and will allow you to create object names that VBA cannot support. Sometimes, Access will give you a warning to not use a particular name for a control. Don't ignore the warning. It is far better in the long run to go with the lowest common denominator and only create names that VBA will be happy with. You won't regret it. Remember, you are now working with a relational database so the names of your objects and variables are NOT necessarily the names your user will see in forms and reports. Don't confuse Access with Excel where the data and presentation layers are combined so if you call something FullName, you are stuck with that for your "reports" also.
3. Also, be careful to avoid using Reserved Words as your Column names. This can be difficult given that you are working with VBA, Access, and SQL so the list is pretty long and you will never memorize it, nor should you bother. The worst mistake is to use "Name" as a column name. The second worse is to use "Date". Every object has a Name property so when you are writing VBA and you write Me.Name, what "name" do you think you will get? So, whenever you want to name an object, if the name you choose is very simple and common, it is almost certainly "owned" by VBA, Access, or SQL So, use compound names. They are more descriptive anyway. PackingDate, ProdName, etc.
4. And then there's the repeating groups. The obvious ones are those with numeric or single letter suffixes. The less obvious ones are the "Labels" set in PackingSteps and the "check" and "scales" in PackingRecord. When you have more than one of something, you have "many" and "many" requires a separate child table so that you don't limit yourself to 10 "w" or 3 "check" or 3 "batch", etc. In a relational database, it is never right to make hard limits.
5. Using Screen Active control is very dangerous because you don't always know what control Access or Windows things is active. There are better methods to use your frmUseByCalandar that will ensure you are always incrementing the intended control.
6. You are not doing much validation but in all the cases I have seen, the validation is being done in the wrong event. The best, event to use for validation is the FORM's BeforeUpdate event. This is the last event that runs before a record gets saved and it CANNOT be bypassed. It runs regardless of what made the form dirty and regardless of what caused Access to save the record. Think of it as the flapper at the end of a funnel. If the flapper is open, the record is saved. If the flapper is closed, the record will not be saved. YOU have COMPLETE CONTROL but ONLY if you use the correct event. If you use other events, they will work under some but not all conditions because all of them can be bypassed in some manner EXCEPT for the FORM's BeforeUpdate event. Even the Control's BeforeUpdate event can be bypassed. If you don't put focus in the field, there is no way to activate its events. If you use VBA to put a value in the field, the control level events won't fire. ONLY the FORM's BeforeUpdate event can never be bypassed.
7. I have no clue why you are using the Change event of multiple controls to set AllowAdditions to False. You've got this in multiple controls in multiple forms and in no case is that the correct event to set this property. The form and control level events are NOT random. They are defined for specific purposes and if you want Access to work to help you, you need to get a grip on what events are used for which purpose. I can't tell the reason you want to set AllowAdditions to False. A more logical event would be the form's Current event or the form's Load event. Or even set the default to False and don't use code at all. It depends on the situation.
I guess you didn't believe me when I told you to not make forms and reports until your schema was solid

I've only been doing this for 50 + years so what do I know. If you want to fix your schema, you now have a lot of work to do to fix your other objects. If you don't want to fix your schema, you will have to live with it forever and constantly write code to get around the mistakes in it.
An application with a shaky foundation (schema) is weak from the start. Everything will be harder to accomplish than necessary. Making changes to accommodate a growing business will be way too time consuming.
I've included a couple of links to useful databases I built. One will show you why you should not use certain reserved words as column names and the other will give you a way to manage simple lookup value lists without having to hard-code them in the table definition or create separate tables for each one.
This database has several useful code procedures that you can copy into your BE to fix up defaults you don't like: 1. Change the allow ZLS string property to No If you want to make a text field required, it makes no sense at all to have the Allow ZLS property set to Yes. 2. Turn off sub...
www.access-programmers.co.uk
When you have several lookup tables in an application, it becomes a pain to create separate tables and maintenance forms to manage the contents. This sample is an application that I first developed over 40 years ago, long before Access was a twinkle in Bill's eye. It was constructed using...
www.access-programmers.co.uk