Here's some old code I've used...
Private Sub cmdMainFix_Click()
Dim ZZ As Database, RS As DAO.Recordset
Dim NewDBName As String, sDBName As String, MM$, NN$, Resp%
Dim FileLength, FileNum As Integer, Pauser As Double, EndTime As Date
On Error GoTo Blake1
MM = "Are You Sure You Want To Compact" & vbCrLf
MM = MM & "The Main Database?"
NN = "Compact The Main Database?"
Resp% = MsgBox(MM, vbYesNo + 256, NN)
If Resp% = vbYes Then
Screen.MousePointer = 11
MM = "Please Wait - The Main Database Is Being Compacted."
GoGoGo.SetFocus: lblWaiter.Caption = MM
Call NoButtons
Set ZZ = CurrentDb()
Set RS = ZZ.OpenRecordset("DBMainNames")
With RS
.MoveFirst
Do Until .EOF
sDBName = !DBName
'MsgBox sDBName
'New name for compacted DB
'''3/12/01 - NewDBName = Left(sDBName, Len(sDBName) - 4)
'MsgBox NewDBName
'MS example uses old name plus CurDate
'NewDBName = NewDBName & " " & Format(Date, "MMDDYY") & ".mdb"
'''3/12/01 - NewDBName = NewDBName & "AAA.mdb"
NewDBName = "C:\BobDev\ABC.mdb"
If Dir(NewDBName) <> "" Then
Kill NewDBName
End If
DBEngine.CompactDatabase sDBName, NewDBName
'FileCopy SourceFile, DestinationFile
FileCopy NewDBName, sDBName
'MsgBox NewDBName
If Dir(NewDBName) <> "" Then
Kill NewDBName
End If
.MoveNext
Loop
.Close: Set RS = Nothing: ZZ.Close: Set ZZ = Nothing
End With
Else
Exit Sub
End If
Pauser = 3
EndTime = DateAdd("s", Pauser, Now())
While EndTime >= Now()
DoEvents
Wend
FileNum = FreeFile()
NN = "\\Main Database\pas3dot2.mdb"
Open "\\Main Database\pas3dot2.mdb" For Input As #FileNum
FileLength = LOF(FileNum)
Close #FileNum
LblMainSize = "The Main Was " & Format(FileLength, "##,##") & " Bytes " _
& "When Last Compacted On " & Format(Now(), "mm/dd/yyyy") & ", " _
& Format(Now(), "Medium Time") & "."
txtActMain.Caption = "The Main Is " & Format(FileLength, "##,##") & " Bytes."
FileNum = FreeFile()
NN = "C:\BobDev\CompFETMM.mdb"
Open "C:\BobDev\CompFETMM.mdb" For Input As #FileNum
FileLength = LOF(FileNum)
Close #FileNum
lblCompacter.Caption = "The Compactor Is " & Format(FileLength, "##,##") & "
Bytes."
lblWaiter.Visible = False: Screen.MousePointer = 1
MsgBox "The Main Database Has Been Compacted.", , _
"Plastics Compactor Database"
cmdBacker.Enabled = True
Blake2:
Call HeyButtons
Call CkLoaded
Screen.MousePointer = 1: Exit Sub
Blake1:
Screen.MousePointer = 1
Select Case Err
Case 3024
MM = Err.Description & vbCrLf & vbCrLf
MM = MM & "Please Check The Database" & vbCrLf
MM = MM & "You Have Listed To Compact."
MsgBox MM: Resume Blake2
Case 3055
MM = Err.Description & vbCrLf & vbCrLf
MM = MM & "Please Check The Database" & vbCrLf
MM = MM & "You Have Listed To Compact."
MsgBox MM: Resume Blake2
Case 3356
MM = "The Main Database Can NOT" & vbCrLf
MM = MM & "Be Compacted Now. Please See Message Below."
lblWaiter.Caption = MM
MM = "The Main Database Is Being Used." & vbCrLf & vbCrLf
MM = MM & "Please Check " & """Who's Logged On?""" & vbCrLf
MM = MM & "To See The User." & vbCrLf & vbCrLf
MM = MM & "No User Can Be Using The Main" & vbCrLf
MM = MM & "Database While It Is Being Compacted." & vbCrLf & vbCrLf
MsgBox MM: Resume Blake2
Case Else
MsgBox "Error Number " & Err.Number & " " & Err.Description: Resume Blake2
End Select
End Sub
HTH - Bob