Option Compare Database Option Explicit Sub sbRunMe() Call fnCompactRepairDatabase End Sub Public Function fnFileExists(ByVal path_ As String) As Boolean ' https://stackoverflow.com/questions/44434199/access-vba-check-if-file-exists fnFileExists = (Len(Dir(path_)) > 0) End Function Public Function fnCompactRepairDatabase() On Error GoTo error_handler Dim sFilename1 As String Dim sFilename2 As String Dim sFilename3 As String Dim sLockFilename As String sFilename1 = fnFileDialog sFilename2 = Mid(sFilename1, 1, InStr(1, sFilename1, ".") - 1) & _ " Compact " & Format(Now(), "yyyymmddHHMMSS") & _ Mid(sFilename1, InStr(1, sFilename1, "."), Len(sFilename1)) sFilename3 = Mid(sFilename1, 1, InStr(1, sFilename1, ".") - 1) & _ " Old " & Format(Now(), "yyyymmddHHMMSS") & _ Mid(sFilename1, InStr(1, sFilename1, "."), Len(sFilename1)) sLockFilename = Mid(sFilename1, 1, InStr(1, sFilename1, ".") - 1) & ".laccdb" 'MsgBox sLockFilename 'MsgBox sFilename1 'MsgBox sFilename2 'MsgBox sFilename3 If fnFileExists(sLockFilename) Then MsgBox "This database is being used - exiting function - this database will NOT be compacted " _ & vbCr & vbLf & vbCr & vbLf & sFilename1 Exit Function Else MsgBox "This database will be compacted " & _ vbCr & vbLf & vbCr & vbLf & sFilename1 End If Application.CompactRepair sFilename1, sFilename2 Name sFilename1 As sFilename3 ' Rename file .accdb to Old .accdb Name sFilename2 As sFilename1 ' Rename file Compact .accdb to .accdb MsgBox "Database has been compacted." & _ vbCr & vbLf & vbCr & vbLf & "Please buy me a coffee! " & _ vbCr & vbLf & vbCr & vbLf & "https://ko-fi.com/dave2988504" error_handler: ' simple error handler it either works or it doesn't End Function Public Function fnFileDialog() As String ' https://docs.microsoft.com/en-us/office/vba/api/office.msofiledialogtype Dim msoFileDialogFilePicker As Long msoFileDialogFilePicker = 3 Dim objFileDialog As Object Set objFileDialog = Application.FileDialog(msoFileDialogFilePicker) Dim varFile As Variant With objFileDialog .allowmultiselect = False .Title = "Please select an Access database" .Filters.Clear .Filters.Add "Access Databases", "*.accdb" ' Show the dialog box. If the .Show method returns True, the ' user picked at least one file. If the .Show method returns ' False, the user clicked Cancel. If .show = True Then 'Loop through each file selected and add it to our list box. For Each varFile In .selecteditems fnFileDialog = varFile Next Else fnFileDialog = "" End If End With End Function |