ヘルプの森~Excel・Access・Office全般ヘルプデスクサイト

No.003

データベース自身を最適化するマクロを作るには

2003/2007/2010/2013

Accessを作業しているうちに、そのデータベースのファイルサイズはどんどん大きくなり、動作も重くなっていきます。
そこで、[データベース ツール]タブ-[ツール]グループ-[データベースの最適化/修復]コマンドを実行すると、データベースは再起動し、ファイルサイズが小さくなり動作もよくなります。

データベースの最適化/修復

[データベースの最適化/修復]コマンドは、[ファイル]タブ-[情報]にもあります。
ファイルサイズが小さくなるのは最適化の方ですが、修復もしてくれるので、いいことづくめです。
詳しくは、ヘルプ「データベース終了時にいつも最適化する」をご参照ください。

ところで今回は、自分のタイミングで最適化したいというご希望に沿ったものです。
そんな場合は、リボンのコマンドをクリックすればよいのですが、少々遠いです。
そこでフォームなどに、マクロなどで作成した最適化のボタンを作るという内容です。
フォームにボタンを作成してマクロと設定する手順は省き、マクロとVBAでその動作をどう作るかをご案内します。

ところが、マクロやVBAで最適化と思われる設定で実行しても、データベース自分自身の最適化はエラーが出てうまくいきません。
先にうまくいかない方法をご紹介後、うまくいく簡単な方法をご案内します。

<最適化マクロのエラー>

ちなみに、マクロで[メニューコマンドの実行]アクションを選択し、引数[コマンド]に[データベースの最適化]を設定した場合、実行すると次のような、開いているデータベースは最適化できない旨のエラーが出てしまいます。

データベースの最適化/修復

VBAは多少違いますが、次の1行が最適化の記述です。

  DBEngine.CompactDatabase 最適化対象DB, 最適化後作成されるDB

VBAの場合は、最適化対象DBでない第3者DBにVBAを作成して実行すると、最適化後のDBが作成される、というもので、少し大げさです。
最適化対象DBでこれを実行することはできないのはもちろん、最適化後作成されるDBが存在していてもエラーが出ます。

したがって、自分自身を最適化できる、リボンのボタンのような動作は、上記の方法ではできません。

<アクセス キーで最適化マクロを作成>

アクセス キーとは、マウスを使用せずにキー操作でコマンドを実行していくもので、Officeでは、「Alt」キーや「F10」を押すと、リボン上にアルファベットが表示され、たどってキーを押していくことで、コマンドを実行できるようになっています。

[データベース ツール]タブ-[ツール]グループ-[データベースの最適化/修復]コマンドを実行したい場合のアクセス キーは、「Alt」「Y」「C」です。
または、コマンドは一番左にありますので「Alt」「Y」のあと「Tab」または「↓」でボタン選択し「Enter」で実行することでもいけます。

リボンのコマンドでは、データベース自分自身を最適化することができますので、このキー操作をマクロやVBAで作成すると、希望がかなうことになります。

これをマクロで設定するには、[キー送信]アクションを使用します。
[キー送信]アクションは、[マクロ ツール]-[デザイン]タブ-[表示/非表示]グループ-[すべてのアクションを表示]ボタンをオンにして指定してください。

引数[キー操作]に、アクセス キーを指定しますが、「Alt」キーは「%」で指定します。
したがって引数には「%YC」と半角で入力します。

最適化マクロ

何らかの状況により、最後の「C」が残ってしまいうまくいかない場合は、「Tab」を使用する方法にし、引数[キー操作]には「%Y{Tab}{Enter}」と指定しましょう。
「Tab」などのキーは半角中かっこ({})を使用するようになっています。

VBAでは、SendKeysステートメントを使用し、

  SendKeys "%(YC)"

または

  SendKeys "%(Y){TAB}{Enter}"

の1行です。

マクロもVBAも簡単です。是非活用してください。

マクロの[キー送信]アクション、VBAのSendKeysステートメントについては、Excelですが次のヘルプ「InputBox のテキスト ボックス入力時に日本語入力をオンにする 《SendKeys》」の半ばからあるヘルプmemoもご参考ください。

関連ヘルプ

入力データを取り消すときの「ESC」キーを押すのと同じマクロは 《キー送信・メニューコマンドの実行》
テーブルにフィールドを追加、データ型を設定するマクロ 《SQLの実行》