Sencillo ejemplo de como compactar una BD de Access 2007
Hasta los momentos no conozco ningun Codigo VBA que Compacte una BD Access 2007, estando esta abierta
y oculta la ventana principal asi como la cinta de opciones
Mas sin embrago con Access 2003 si se puede hacer, Usando la funcion CommandBars
El Codigo:
CommandBars("Menu Bar").Controls("Herramientas").Controls _
("Utilidades de la base de datos").Controls _
("Compactar y reparar base de datos...").accDoDefaultAction
En 2007 podemos utilizar la funcion SendKeys, soli si tenemos la cinta de opciones Activada
El Codigo
SendKeys "%huo", False
Otra forma de compactar 2007 si tenemos oculta la Cinta de opciones y la ventana principal de Access, seria utilizar otra base de datos como Compactador y de alli llamar la Funcion CompactaBD
El Codigo
Function CompactaBD(strRutaBaseDatos As String) As Boolean
Dim strTemporal As String
On Error GoTo CompactaBD_TratamientoErrores
strTemporal = Environ("Temp") & "\TempDB" & Format(Now, "yymmddhhss") & ".accdb"
DBEngine.CompactDatabase strRutaBaseDatos, strTemporal
Kill strRutaBaseDatos
Name strTemporal As strRutaBaseDatos
CompactaBD = True
CompactaBD_Salir:
On Error GoTo 0
Exit Function
CompactaBD_TratamientoErrores:
Select Case Err.Number
Case 3356
MsgBox "La Base de Datos está abierta, Por favor cierre todas" & vbCrLf & "las instancias de la base de datos e intentelo de nuevo", vbCritical + vbOKOnly, "ATENCION"
Case Else
MsgBox "Error " & Err & " en proc.: CompactaBD de Módulo: Módulo1 (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
End Select
CompactaBD = False
Resume CompactaBD_Salir
End Function