Your tables must be like:
WWWRoster: MemberID, ForeName, LastName, ... (Leave FullName out of here!);
Payments: PaymentID, MemberID, PaymentYear, PaymentAmount (No member names here!)
To get the list of all members, not having paid in year 2024, the basic query will be like
Code:
SELECT mbr.MemberID, mbr.LastName & ", " & mbr.ForeName AS FullName
FROM WWWRoster mbr LEFT JOIN (SELECT pmt.PaymentID, pmt.MemberID, FROM Payments pmt WHERE pmt.PaymentYear = 2024) pmt2024 ON pmt2024.MemberID = mbr.MemberID
WHERW pmt2024.PaymentID Is Null
Probably you have to check, is the member active for year 2024 too. When not, then obviously he/she didn't have to pay at all. So the table WWWRoster must have some field(s) allowing to decide about membership being active for certain year, or not.
Another thing you have to take into account is, that person names aren't fixed really. Without them being put into some names history table, asking for info from past years you get person's current name, which can be different than real one in asked year. And when you then have to compare gotten data e.g. with some printed documents, you may be in trouble!