Non mi è chiaro il perché richiami la compatdatabase all'interno della funzione compatdatabase.

Non vedo ricorsività possibile.

Public Function CompactDatabase(strDatabase As String, Optional varOutputDatabase As Variant) As Long

dim DBEngine as DataBase

Dim TempFile As String
TempFile = "C:\Temp"

On Error GoTo PROC_ERR

DBEngine.CompactDatabase strDatabase, TempFile

Kill strDatabase
FileCopy TempFile, strDatabase
Kill TempFile

PROC_EXIT:
Exit Function