Access VBAで最適化する方法(ファイル選択ダイアログで指定し実行)

最適化するには、DBEngine.CompactDatabaseを使用します。

構文: DBEngine.CompactDatabase 最適化元ファイル名, 最適化先ファイル名

最適化する効果として、ファイルサイズが小さくなります。

ファイルサイズが小さくなるということは、検索などの処理スピードが改善されると思いますが、パソコンの性能向上もあり、それがどの程度かは不明です。

ここでは、Access VBAで最適化を実行し、どれくらいファイルサイズが小さくなったかを検証します。




BackHome BackTips Backメニュー

■ 最適化フォームの作成

下のように、[最適化]ボタンと、最適化ファイルを表示するテキストボックスを配置します。
最適化フォーム

ボタンのクリックイベントと、ファイル選択ダイアログのコードを入力します。
コード入力画面

実行画面です。
実行画面

■ 最適化のVBA

1)ボタンをクリックすると、ファイル選択ダイアログボックスが開きます。
2)ファイルが選択されると、最適化先ファイルを削除します。
3)DBEngine.CompactDatabas で最適化を実行します。
4)最適化元ファイルを削除します。
5)最適化先ファイルを元ファイルにコピーします。

※ 最適化先ファイルの名前を変更する方法もあります。 ここでは、安全のため一応残すようにしました。

Option Compare Database

Public Function SelectFile_FileDialog() As String
    Dim dlgfolder As FileDialog
    Application.FileDialog(msoFileDialogFilePicker).Title = "ファイルを選択してください"
    
    Application.FileDialog(msoFileDialogFilePicker).InitialFileName = "c:\test\"
    
    Application.FileDialog(msoFileDialogFilePicker).Filters.Clear
    
    Application.FileDialog(msoFileDialogFilePicker).Filters.Add "Access Databese", "*.accdb"
    
    Application.FileDialog(msoFileDialogFilePicker).AllowMultiSelect = False
     
    If Application.FileDialog(msoFileDialogFilePicker).Show = -1 Then
        SelectFile_FileDialog = Application. _
        FileDialog(msoFileDialogFilePicker).SelectedItems(1)
    Else
        SelectFile_FileDialog = ""
    End If
 End Function

Private Sub コマンド0_Click()
    
    Me!テキスト1 = SelectFile_FileDialog
    
    If Me!テキスト1 <> "" Then
        Kill "c:\test\temp.accdb"
        
        DBEngine.CompactDatabase Me!テキスト1, "c:\test\temp.accdb"
    
        Kill Me!テキスト1

        FileCopy "c:\test\temp.accdb", Me!テキスト1
    End If
    
End Sub

■ 最適化の効果

最適化前のファイルサイズが、1,183,744Byteです。
最適化前のファイルサイズ

最適化後のファイルサイズが、1,134,592Byteです。
結果、49,152Byte小さくなりました。
最適化後のファイルサイズ

BackHome BackTips Backメニュー

Copyright(C) FeedSoft