Accessでは、マクロアクション(マクロの実行アクション)やVBA(Visual Basic for Applications)を使って一連の操作を簡単に実行できます。
よく使用する例としては、フォームにコマンドボタンを作成して、そのボタンをクリックすることで定義した操作を実行できるようになります。
そのコマンドボタンを作成する場合、マクロアクションかVBAで定義することになりますが、目的とする動作は同じでも、作成方法は異なります。
マクロアクションの方が初心者向きですが、VBAならできるけど、マクロアクションではできないこともあります。
しかし、マクロアクションの方がオブジェクトやコントロールの名前を変更した場合は、自動で修正されるなどのメリットもあります。
[ビルダーの選択]ダイアログボックスで[マクロビルダー]を選択するか、[コードビルダー]を選択するかで悩むこともあると思います。
VBAでできなかったから、マクロアクションへ変更する場合もあると思います。
そういう場合に気をつけてほしいことを記しておきます。
クリック時イベントで設定
ここでは、コマンドボタンのプロパティを開いて、クリック時イベントでフォームを開く設定をします。
[マクロビルダー]で設定する方法と、[コードビルダー]で設定する方法を解説します。
マクロビルダーで設定
コマンドボタンのプロパティを開いて、[イベント]タブの[クリック時]の[ビルダー選択」ボタン[…]をクリックします。
キーボードから[F4]キーを押すと、プロパティの表示/非表示ができます。
[ビルダーの選択]ダイアログボックスが表示されますので、[マクロビルダー]を選択して[OK]ボタンをクリックします。
[ビルダーの選択]ダイアログボックスは、コマンドボタンで右クリックして、ショートカットメニューから[イベントのビルド]をクリックしても表示できます。
[マクロビルダー]のウィンドウが表示されます。[マクロウィンドウ]と呼ばれることもあります。
[マクロツール]の[デザイン]タブが表示されます。
[新しいアクションの追加]の▼ボタンをクリックします。
長い一覧が表示されます。これが[マクロアクション]と呼ばれるコマンドです。
一覧から[フォームを開く]を選択します。
[フォームを開く]コマンドの設定ウィンドウが表示されます。
[フォーム名]の▼ボタンをクリックすると、一覧には、既存のフォームがすべて表示されますので、目的のフォームを指定します。
その他の設定項目は、既定のままにします。
分かりづらいときは、ポップヒントを読むことをお勧めします。
次の[新しいアクションの追加]にマクロアクションを追加して繋げていくことができますし、アクションの順番も変更できます。後で編集することもできます。
ここでは、[フォームを開く]アクションのみにします。
動作を確認したい場合は、[ツール]グループの[実行]ボタンをクリックすると確認できます。
上書き保存して、マクロビルダーを閉じます。
マクロアクションでは、入力後カーソルを別領域へ移動させて保存しないと、保存できない場合がありますので気をつけてください。
設定後のプロパティには、[埋め込みマクロ]と表示されます。
参考目的のアクションが見つからない場合は、[すべてのアクションの表示]ボタンをクリックすると表示されます。
コメントを残すこともできます。マクロアクションの一覧から[コメント]を選択します。
コメントのテキストボックスに入力すると、以下のように緑色の文字で表示されます。
エラー時アクションもあります。
-
[エラー時]アクションでマクロのエラーを出さずに次に進ませる
Accessでマクロを実行しようとすると、エラーメッセージが表示されて途中でストップしてしまうことがあります。 [エラー時]アクションを使用 ...
独立マクロを作成する場合も同じです。
独立マクロの場合は、ナビゲーションウィンドウに表示されます。
-
独立マクロを作成してフォームを開くボタンを設置
Accessで作成済みのフォームを、ボタンをクリックして開くようにする方法です。 ここでは、独立マクロを作成してボタンに登録する方法を解説し ...
[埋め込みマクロ]と[独立マクロ]の違いについては、以下に記しています。
どちらがよいというわけではありません。上手に使い分けてください。
-
独立マクロと埋め込みマクロの違いを知って使い分け
Accessのマクロには、独立マクロと埋め込みマクロというのがあります。 独立マクロは、マクロを個別に作成して、後でオブジェクトのプロパティ ...
コマンドボタンウィザードで作成した場合も[埋め込みマクロ]と表示され、マクロアクションで作成されています。ウィザードで作成した後、どんなアクションが使われているかを確認できます。
-
コマンドボタンウィザードを使用したボタンの作成
Accessで起動時にメニューフォームを表示した後、ボタンをクリックして目的のフォームを開くようにしたいという要望はよくあります。 コマンド ...
テーブルで設定するデータマクロもマクロアクションで操作できます。
-
削除後のレコードを自動で指定テーブルへ保存するデータマクロ
Accessには、テーブルで行った削除や追加、更新などの実行時に、設定した処理を自動で実行してくれる[データマクロ]というのがあります。 こ ...
-
更新日時を指定テーブルやフィールドへ自動で保存するデータマクロ
Accessのテーブルのデータを処理するためのマクロのことを[データマクロ]と呼びます。 テーブルで行った削除や追加、更新などの実行時に、設 ...
変数を使用することもできます。
-
レポートの詳細セクションに直線を引いて数行おきに罫線を設定する
Accessのレポートで罫線を数行おきに設定する方法です。 Accessには罫線という機能はありませんが、[詳細]セクションに[直線]を引く ...
-
レポートを数行おきに色が異なる縞模様(背景色)にするには
Accessでレポートを作成すると、既定で1行おきに背景色が異なる縞模様になります。 背景色はプロパティで簡単に変更できますし、背景色なしに ...
コードビルダーで設定
[ビルダーの選択]ダイアログボックスが表示されますので、[コードビルダー]を選択して[OK]ボタンをクリックします。
VBEが起動します。VBE(Visual Basic Editor)とは、VBAを記述するためのエディターです。
VBEのコードウィンドウにフォームを開くためのコードを記述します。
小文字で入力しても、自動で大文字に変換されますし、入力補助ウィンドウを使用するとミスが少なくなります。
以下のように入力して閉じます。
DoCmd.OpenForm "F_入力フォーム"
詳細な設定については、Microsoftの以下の記事を参照してください。
DoCmd.OpenForm メソッド (Access) | Microsoft Learn(Microsoft)
簡単なコードなら問題ないかもしれませんが、コードの記述にはある程度の(いや、多くの)知識が必要になります。
マクロアクションではできないこともVBAならできることがあります。データベース全体で使用しているコードを確認する場合は、VBEを表示すれば確認できるので便利です。
コードビルダーで設定後のプロパティには、[イベントプロシージャ]と表示されます。
参考VBAが得意でコードビルダーしか使用しないのであれば、[Accessのオプション]ですぐにVBEを表示する設定ができます。
[Accessのオプション]ダイアログボックスの[オブジェクトデザイナー]にある[常にイベントプロシージャを使用する]のチェックボックスをオンにすると、[ビルダーの選択]ダイアログボックスが表示されず、すぐにVBEが表示されるので効率的です。
以下の本はお勧めです。初心者向けの解説で、マクロアクションとVBAについて理解しやすいです。
オブジェクトやコントロールの名前を変更した場合の違い
データベースの作成途中、または、完成後にオブジェクト名を変更することがあります。
変更するのはいいのですが、変更したあとに、動作しない、エラーがでるといった状況になることがあります。
マクロアクションとVBAで設定した場合の違いを解説します。
たとえば、以下のように2つのコマンドボタンがあります。
上は、マクロビルダーを起動してマクロアクションで作成したボタンで、下は、コードビルダーを起動してVBAで作成したボタンです。
フォーム名[F_入力フォーム]を[F_新規入力フォーム]に変更します。
参考オブジェクト名に全角括弧やスペースなどは含まないようにしたほうがいいです。
Access データベースで特殊文字を使用したエラー - Microsoft 365 Apps | Microsoft Learn(Microsoft)
そして、フォームの2つのコマンドボタンをクリックしてみます。
マクロビルダーで作成したボタンは、動作しますが、コードビルダーで作成したボタンをクリックすると、以下のエラーメッセージが表示されます。
実行時エラー'2102'
フォーム名'F_入力フォーム'が正しくないか、存在しないフォームを参照しています。
2つのコマンドボタンを設置しているフォーム[F_menu]をデザインビューで開いて、それぞれのビルダーを表示してみます。
マクロビルダーで作成したコマンドボタンを選択して、クリック時イベントの[…]をクリックします。
フォーム名は、自動的に変更されています。(マクロアクションによっては、自動変更されないケースもあります。)
コードビルダーで作成したコマンドボタンを選択して、クリック時イベントの[…]をクリックします。
フォーム名は、そのままです。修正する必要があります。
また、コマンドボタンの名前を変更した場合もマクロアクションでは何も修正する必要はありません。コマンドボタンの[名前]と[標題]は異なります。[標題]とはボタンに表示される文字のことです。
Accessに慣れないうちは、できるだけマクロアクションを使って設定したほうが楽だと思います。
マクロアクションでは設定できない場合のみ、コードビルダーを起動して設定するようにしておくといいかもしれません。
VBAが分からなくても、コピー&ペーストで動作するかもしれませんが、後々、修正が必要になったとき、初心者が分かりやすいのはマクロアクションです。
マクロアクションで設定しておいて、VBAを学習した後、マクロアクションをVBAに書き換えてみるのもいいと思います。
マクロアクションで設定しているのにエラーが出る場合
マクロアクションで設定していても、以下のようなメッセージウィンドウが表示されることがあります。
フォーム名'F_入力フォーム'が正しくないか、存在しないフォームを参照しています。
これは、[Accessのオプション]ダイアログボックスで、[名前の自動修正]がオフになっているためです。
[現在のデータベース]の[名前の自動修正オプション]にある[名前の自動修正を行う]のチェックボックスをオンにすると自動修正されるようになります。
[名前の自動修正情報をトラックする]がオンであった場合は、Accessを再起動する必要はありません。コマンドボタンを設置しているフォームを再表示すると、修正されます。
[名前の自動修正情報をトラックする]をオフにすると、他の項目は無効になります。
既定はオンになっています。
ただ、名前の自動修正は完璧ではありません。以下のようなこともあります。
-
開くときに意図しないパラメーターの入力ウィンドウが表示される
Accessで作成したデータベースのテーブルや、クエリ、フォーム、レポートを開こうとすると、[パラメータの入力]を求めるウィンドウが表示され ...
[名前の自動修正]はオフにしなければならない場合は、マクロウィンドウを表示して手動で修正してください。
イベントプロシージャの削除
VBE(コードビルダー)を開いてコードを記述してみたけど、うまくできなかったので、マクロアクションの設定に変更することもあると思います。
その時に注意して欲しいことがあります。
コードビルダーで設定した後は、プロパティに[イベントプロシージャ]と表示されます。設定しなくても、コードビルダー(VBE)を表示しただけで、[イベントプロシージャ]と表示されます。
イベントプロシージャの文字だけを消しても、コードは残っていますので注意してください。
コードが削除されずに残る場合
[ビルダーの選択]ダイアログボックスを表示して[マクロビルダー]を選択するため、プロパティの[イベントプロシージャ]の文字を消します。
そして、[ビルダー選択]ボタン[…]をクリックすると、[ビルダーの選択]ダイアログボックスが表示されます。
そして、マクロビルダーで設定すると、以下のようにプロパティには[埋め込みマクロ]と表示されます。
でも、[フォームデザイン]タブの[ツール]グループにある[コードの表示]をクリックして、VBEを開くと、
以下のように記述したコードは残っています。
VBAからマクロアクションへ変更する場合は、VBE(コードビルダー)からコードを削除して保存してから、変更するようにしてください。
VBEを表示するショートカットキーは、[Alt]+[F11]です。再度、このショートカットキーを使用すると、フォームやレポートウィンドウに切り替えられます。
VBEを閉じるショートカットキーは、[Alt]+[Q]です。
また、マクロアクションは、アクションを削除し上書き保存してマクロウィンドウを閉じても、プロパティには[埋め込めマクロ]と表示されます。
プロパティから[埋め込みマクロ]の文字を削除しておかないと、設定していないのに設定していると勘違いしてしまうこともあります。
フォームやレポートは、コピーして使用することもあると思います。
この時、埋め込みマクロやVBAも一緒にコピーされます。残ったままにしておくと、エラーの原因になることもありますので、設定後は不要なコードやアクションが残っていないかを確認するようにしてください。
サイトでは、できるだけ[マクロビルダー]と[コードビルダー]での両方の設定を解説するようにしていますので参考にしてください。