I haven't verifed your statement regarding the max value of an A297 Timer Interval... but I believe you. I found the following code on Microsoft's web site showing how to compact a database everyday at midnight. By the comments in their own code, they acknowledge that this code will run once every minute to check the system time. That means that it needs to run 1,440 times per day just so that it can catch the one instance when it is needed. That's not very efficient... but it is more efficient that your code.
Your code will continue to run without stopping until the time is 1800. If that loop starts when a user logs in at 0800, it will not stop looping until 1800... that's a lot of wasted resources.
I recommend that you run your code once an hour and check to see if the current time is greater than or equal to 1800. If the function fails (ie, it's earlier than 1800), then exit the loop. (Your loop continues until the function returns true). Your code will then run again in an hour to check the function.
Here is Microsoft's Code... if you need help adapting it to your need, please let me know, and I'll work with you.
Have a great day!
Rock ON!
Kevin
Private Sub Form_Timer()
'==================================================================
'The Timer event runs this code every minute. It compares your
'system time with the StartTime variable. When they match, it
'begins compacting all databases in the DBNames table.
'==================================================================
Dim StartTime As String
' Set this variable for the time you want compacting to begin.
StartTime = "12:00 AM"
' If StartTime is now, open the DBNames table and start compacting
If Format(Now(), "medium time"

= Format(StartTime, _
"medium time"

Then
Dim RS As Recordset, DB As DATABASE
Dim NewDBName As String, DBName As String
Set DB = CurrentDb()
Set RS = DB.OpenRecordset("DBNames"

On Error Resume Next
RS.MoveFirst
Do Until RS.EOF
DBName = RS("DBFolder"

& "\" & RS("DBName"

' Create a new name for the compacted database.
' This example uses the old name plus the current date.
NewDbName = Left(DbName, Len(DbName) - 4)
NewDbName = NewDbName & " " & Format(Date, "MMDDYY"

& ".mdb"
DBEngine.CompactDatabase DBName, NewDBName
RS.MoveNext
Loop
' Close the form, and then close Microsoft Access
DoCmd.Close acForm, "CompactDB", acSaveYes
RS.Close
DoCmd.Quit acSaveYes
End If
End Sub