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もご参考ください。