Access VBAでデータベースの最適化するには、DBEngine.CompactDatabase を使います。
1)ファイルを選択します。
2)最適化前のファイルサイズを取得します。
3)最適化される作業用のデータベースファイル名を作成します。
4)DBEngine.CompactDatabase で最適化します。
5)元ファイルを削除します。
6)最適化されたファイル名を元ファイルに変えます。
7)最適化後のファイルサイズを取得します。
8)最適化前後のファイルサイズをテキストボックスに表示します。
■実行Access画面
「最適化するファイルの選択」ボタンをクリックすると、ファイル選択ダイアログが表示されます。
Access2007のACCDBファイルか、以前のMDBファイルを選択してください。
終了すると、最適化前後のファイルサイズが表示されます。
■ Access VBA 実行コード例
Option Compare Database
'ファイル選択ダイアログ
Public Function SelectFile_FileDialog() As String
Dim dlgfolder As FileDialog
'ダイアログのタイトル
Application.FileDialog(msoFileDialogFilePicker).Title = "ファイルを選択してください"
'初期のフォルダ
Application.FileDialog(msoFileDialogFilePicker).InitialFileName = "c:\"
'フィルターをアクセスファイル(ACCDBかMDBファイル)にする
Application.FileDialog(msoFileDialogFilePicker).Filters.Clear
Application.FileDialog(msoFileDialogFilePicker).Filters.Add "アクセスファイル", "*.accdb;*.mdb", 1
'一つのファイルのみ選択可能
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()
Dim sfina As String
Dim beforesize As Long
Dim aftersize As Long
Dim wkfina As String
sfina = SelectFile_FileDialog
If sfina = "" Then
Exit Sub
End If
'最適化前のサイズ
beforesize = FileLen(sfina)
'最適化されるファイル名の作成
If Right(sfina, 3) = "cdb" Then
'Access2007の場合
wkfina = Left(sfina, Len(sfina) - 6)
wkfina = wkfina + "temp.accdb"
Else
wkfina = Left(sfina, Len(sfina) - 4)
wkfina = wkfina + "temp.mdb"
End If
'データベースの最適化
DBEngine.CompactDatabase sfina, wkfina
'最適化済みファイルに書き換える
Kill sfina
Name wkfina As sfina
'最適化後のサイズ
aftersize = FileLen(sfina)
Me!テキスト1 = "最適化前サイズ: " & beforesize & vbNewLine
Me!テキスト1 = Me!テキスト1 & "最適化後サイズ: " & aftersize
End Sub