Esse é o melhor codigo que ja experimentei
Primeiro vc deve fazer referencia em microsoft jet and replications objets 2x library
Private Sub ADO_CompactarDB()
'Iniciamos o tratamento de erros.
'Se algo der errado, vamos para a linha indicada.
On Error Goto ErroCompactar
'Declaramos as variáveis
Dim JR As New JRO.JetEngine
Dim S_DbNome As String, S_DbTemp As String
'Descobrimos o caminho do Arquivo Original
'e do Arquivo Temp
S_DbNome = App.Path & "BD.mdb"
S_DbTemp = App.Path & "BDTmp.mdb"
If Right$(App.Path, 1) = "" Then
S_DbNome = App.Path & "BD.mdb"
S_DbTemp = App.Path & "BDTmp.mdb"
End If
'Descobrimos se o Arquivo Temp existe...
If Dir$(S_DbTemp) <> "" Then
'Se existe, deletamos (vide *Kill lá em baixo)
Call Kill(S_DbTemp)
End If
'Compactamos o banco de dados com o
'nome de Arquivo Temp
JR.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & S_DbNome & ";", _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & S_DbTemp & ";Jet." & _
"OLEDB:Engine Type = 4;"
'Este "Engine Type" no final indica a versão do Access que está
'sendo usada. Veja os valores e as versões correspondentes:
'5 (Defaut) para Access 2000
'4 para Access 97
'3 para Access 95/6
'2 para Access 2
'1 para Access 1
'Se Arquivo Original existir...
If Dir$(S_DbNome) <> "" Then
'deleta
Call Kill(S_DbNome)
End If
'Aqui, vc poderia usar a instrução
'Name (vide *Name lá em baixo)
JR.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & S_DbTemp & ";", _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & S_DbNome & ";Jet." & _
"OLEDB:Engine Type = 4;"
'Se chegamos até aqui, avisa ao usuário que
'tudo correu bem...
MsgBox "Compactação do Banco de Dados " & _
S_DbNome & " executada com sucesso.", _
vbOKOnly + vbInformation, "Compactação"
Set JR = Nothing
Exit Sub
ErroCompactar:
'Se caiu aqui, é porque houve erro. Avise ao usuário.
MsgBox "Houve um erro inesperado ao compactar o " & _
S_DbNome & " ." , vbOKOnly + vbInformation, _
"Compactação"
'Limpa o erro. Não é obrigatório mais é de bom
'costume fazer.
Err.Clear
End Sub