Have to repeat the ChkDate field for each date parameter when using relational operators:
& "WHERE ChkDate >= #" & [txtFirstDay] & "# AND ChkDate< #" & [txtLastDay] & "# AND CheckingID >0 " _
Your criteria excludes txtLastDay from the date range. If you really want to include it consider BETWEEN AND:
& "WHERE ChkDate BETWEEN #" & [txtFirstDay] & "# AND #" & [txtLastDay] & "# AND CheckingID >0 " _
Don't have to prefix each field with the table name since there is only one table in the SELECT and if there were multiple tables, only if same field name is in multiple tables.
Code:
SQL = "INSERT INTO tblTransactionsArcives (TransactionID, CheckingID, CategoryID, ChkDate, Description, Cleared, Withdrawals, Deposits, Notes) " _
& "SELECT TransactionID, CheckingID, CategoryID, ChkDate, Description, Cleared, Withdrawals, Deposits, Notes " _
& "FROM tblTransactions " _
& "WHERE ChkDate >= #" & [txtFirstDay] & "# AND ChkDate < #" & [txtLastDay] & "# AND CheckingID >0 " _
& "ORDER BY ChkDate;"
However, moving records to an 'archive' table isn't really necessary. Could just have another field in tblTransactions that sets record as "not active" - can be a yes/no field. Then, just run UPDATE action sql.
BTW, Arcives is a misspelling of Archives.