What you need is TWO fields in your individual training records. (At least two.) One of them is a flag that says "superseded" or something else that means that this old record has become irrelevant. If Joe Schmidlap takes "Operator Level 1" training and then a year later takes it again, you want ALL PREVIOUS RECORDS for "Joe Schmidlap" taking "Operator Level 1" to become superseded so that they don't figure into the "overdue" computation. The second field you need (and probably have) is the date on which the training occurred.
In a normalized setup, you would also have a table of available training and an expiration amount, which could be in any units you want. You would want a number and a unit. The unit would match the units used by DateAdd, which would include years, months, weeks, days, ... whatever. The amount would be the number of those units for expiration computation.
So then when doing the computation, you can do this either of two ways. EITHER
A. Compute the date of interest by using DateAdd( [units], -[expiration-amount], Date() ) to get the critical date
B. Compute the expiration date by using DateAdd( [units], [expiration-amount], [TestTakenDate] ) to get the critical date. Further, for (B) you must choose the only "test taken" record for that person and test combination for which the "superseded" flag is NOT set.
For (A), if the computed date is GREATER than the (only) non-superseded date that the test was taken, it is overdue.
For (B), if the expiration date is LESS than Date() (= today), it is overdue.
Office VBA reference topic
learn.microsoft.com
Just watch out for "y" vs "yyyy" and "w" vs "ww" as the units in question. There is a reflexive tendency to use Now() as a date source, but Now() also includes time-of-day elements and thus could give you a confusing answer on the exact due date. That's why I specified Date() and not Now().