Debe detectar si hay más de 1 usuario conectados, 1 sería el administrador. Puede utilizar esta función
Public Function verifica_Laccdb(basedatos As String) As Boolean
On Error GoTo hay_error
Dim stm As TextStream, fso As FileSystemObject, strLine As String, strChar As String, strArr() As String, nArr As Long, nArrMax As Long, nArrMin As Long
Dim strFilename As String
'basedatos por ejemplo, D:\nada2.accdb"
'Ejemplo de llamada:
' verifica_Laccdb("D:\nada2.accdb")
'Si hay más de 1 usuario NO compactar (1 sería solo el administrador)
strFilename = basedatos
strFilename = Left(strFilename, InStrRev(strFilename, ".")) & "laccdb"
Set fso = New FileSystemObject
Set stm = fso.OpenTextFile(strFilename, ForReading, False, TristateFalse) ' Referenciar Microsoft Scripting Runtime)
While Not stm.AtEndOfStream
strChar = stm.Read(1)
If Asc(strChar) > 13 And Asc(strChar) < 127 Then
strLine = strLine & strChar
End If
Wend
strArr = Split(strLine, "Admin", , vbTextCompare)
nArrMax = UBound(strArr)
If nArrMax > 1 Then ' hay más usuarios conectados fuera del administrador
verifica_Laccdb = True
Else
verifica_Laccdb = False
End If
stm.Close
Set stm = Nothing
Set fso = Nothing
hay_error:
If Err.Number = 53 Then
MsgBox "La base de datos no está abierta", vbInformation, "Error.."
verifica_Laccdb = False
End If
End Function
Ejemplo de llamada, paso la ruta y nombre de la base de datos.
?verifica_Laccdb("D:\nada2.accdb")
Si retorna True es porque hay más de 1 usuario conectado, entonces NO compactar, en caso contrario False puede compactar. Esto si lo hace desde la misma aplicación.
Como dice un sabio de TodoExpertos "Hay mil formas", esta es una forma y es cierto hay muchas más.