愚者の経験

「また今度」はほとんどこない

カテゴリーアーカイブ: VBS

Access 自分自身を最適化

Access2007以降になって自分自身を最適化するのは難しくなっています。

そこで同じディレクトリにVBScriptを作って、パスを渡して最適化させるものを作りました。
Compact.vbs

Option Explicit
‘***注意***
‘他にAccessプログラムが起動してあると失敗します。
Dim Shell
Dim accdb

‘Accessを終了するまでの時間稼ぎ
MsgBox “最適化を開始します。”, vbInformation, “最適化開始”

Set Shell = CreateObject(“WScript.shell”)

‘Accessファイルパスを引数で渡して最適化を実行する
For Each accdb In WScript.Arguments
Shell.Run “cmd /c ” & accdb & ” /compact”, 0
WScript.Sleep 1000
Next

MsgBox “完了しました。”, vbInformation, “最適化完了”

‘最初の引数に指定したAccessファイルを起動する
If WScript.Arguments.Count > 0 Then
Shell.Run “cmd /c ” & WScript.Arguments(0), 0
End If

Set Shell = Nothing

こんな感じでAccessのパスをArgumentsに渡して最適化させます。

複数渡すというのは一応プログラムファイルとデータファイルが分かれていることを想定して、
データとプログラムを同時に最適化するためです。

Access呼び出し側

Public Sub CompactRepair()
On Error GoTo Finally
    Dim sb As String
     
    Beep
    If (MsgBox(“プログラムの最適化を行います。よろしいですか?” & vbCrLf & _
                “※この操作ではプログラムを再起動します。”, vbInformation + vbDefaultButton2 + vbYesNo, “最適化”) = vbYes) Then
        sb = “WScript.exe ” & _
                CurrentProject.Path & “\Compact.vbs ” & _
                String$(2, 34) & CurrentProject.FullName & String$(2, 34) & ” ” & _
                String$(2, 34) & CurrentProject.Path & “\data.accdb” & String$(2, 34)
        Shell sb, vbHide
        Quit
    End If
Finally:
End Sub

呼び出す方法は結構はまりました。
要するに「WScript.exe 」
という感じになります。文字列はダブルクォーテーション2つで括る必要があります。

またVBSの先頭に書いてありますが、他に起動しているAccessプログラムがあると
起動オプション「compact」の挙動が変わり、compactされたファイルが
そのまま起動するのでおかしなことになります。

また最適化前にバックアップを取ることも有効だと思います。

広告