Accessでボタンを作成する方法をお探しですね。
広告
Accessフォームにボタンを作成!クリックでクエリ実行やレコード追加を行う方法
Accessで作成したクエリを毎回ナビゲーションウィンドウから開いて実行していると、操作に慣れていない人には分かりにくく、誤って別のクエリを実行してしまう心配もありますよね。
そこで便利なのが、フォーム上にボタンを配置して、クリックするだけでクエリ実行やレコード追加ができる仕組みです。
この記事では、「Accessフォームにボタンを作成!クリックでクエリ実行やレコード追加を行う方法」を、初心者にも分かりやすく、ウィザード・マクロ・VBAの考え方まで整理して解説します。
Accessフォームにボタンを作る基本とできること
Accessのフォームにボタンを作ると、ユーザーは複雑なAccess操作を覚えなくても、決められた処理をクリックだけで実行できるようになります。
たとえば、追加クエリで一時テーブルのデータを本番テーブルへ登録する、更新クエリで特定の項目を一括変更する、削除クエリで不要なデータを整理する、といった処理をボタンに割り当てられます。
業務用のAccessでは、利用者にテーブルやクエリを直接触らせるより、メニュー画面のフォームから必要な処理だけを実行できる形にする方が安全です。
特に追加クエリをボタン化するメリットは大きいです。
追加クエリとは、既存のテーブルに別のテーブルやクエリの結果を新しいレコードとして追加するアクションクエリの一種です。
選択クエリのように結果を見るだけではなく、実際にデータを登録するため、実行タイミングを分かりやすく管理する必要があります。
ボタンに「新規データを登録」「処理済みデータを履歴へ追加」などのタイトルを付けておけば、何をする処理なのかが直感的に伝わり、作業ミスの防止にもつながります。
ボタン作成の方法は、大きく分けて**コマンドボタンウィザード**、**マクロビルダー**、**VBA**の3つがあります。
ウィザードは画面の案内に従って作れるので初心者向けで、マクロビルダーはコードを書かずに処理を組み立てたい場合に向いています。
VBAは少し学習が必要ですが、確認メッセージの制御、完了メッセージの表示、エラー発生時の処理などを細かく設定できます。
どの方法でも基本の考え方は同じで、「フォーム上のボタンのクリック時イベントに、実行したいクエリを登録する」という流れになります。
コマンドボタンウィザードでクエリ実行ボタンを作る方法
一番手軽に始めるなら、コマンドボタンウィザードを使う方法がおすすめです。
まず、ボタンを配置したいフォームをデザインビューで開きます。
リボンの「フォームデザイン」または「デザイン」タブから「ボタン」を選び、フォーム上の好きな場所をクリックまたはドラッグして配置します。
このとき、「コントロールウィザードの使用」が有効になっていれば、コマンドボタンウィザードが自動的に表示されます。
表示されない場合は、コントロールグループ内のウィザード設定がオフになっていないか確認してください。
ウィザードが開いたら、種類から「その他」を選び、ボタンの動作として「クエリの実行」を選択します。
次の画面で、実行したいクエリを一覧から選びます。
たとえば、事前に「Q_追加クエリ」という追加クエリを作成している場合は、そのクエリを指定します。
続いて、ボタンに表示する文字列を設定します。
「追加クエリの実行」でも動作は分かりますが、実務では「入力データを登録する」「売上データを取り込む」のように、利用者目線で処理内容が分かる言葉にする方が親切です。
ウィザードで作成したボタンは、クリック時イベントに埋め込みマクロが設定されることが多いです。
フォームビューに切り替えてボタンをクリックすれば、指定したクエリが実行されます。
ただし、追加クエリや更新クエリなどのアクションクエリを実行すると、「○件のレコードを追加します」などの確認メッセージが表示されます。
このメッセージは誤操作防止に役立つ一方、毎回表示されると利用者にとって煩わしい場合もあります。
非表示にする場合は、マクロで「メッセージの設定」を使うか、VBAで警告表示を制御しますが、業務データを変更する処理では安易に消さず、運用に合わせて判断することが大切です。
マクロやVBAでクリック時に追加クエリを実行する方法
ウィザードを使わずに設定したい場合は、ボタンのクリック時イベントにマクロを登録します。
フォームをデザインビューで開き、ボタンを配置したら、プロパティシートを表示します。
「書式」タブの「標題」にはボタン上に表示する文字列を入力し、「その他」タブの「名前」には管理しやすい名前を付けます。
たとえば、標題は「新規レコードを追加」、名前は「cmdAddRecords」のようにしておくと、後からフォームを修正するときにも目的が分かりやすくなります。
次に、プロパティシートの「イベント」タブを開き、「クリック時」のビルダーからマクロビルダーを選択します。
アクションとして「クエリを開く」を選び、クエリ名に実行したい追加クエリや更新クエリを指定します。
これで、ボタンをクリックしたときにクエリが実行される仕組みが完成します。
マクロはコードを書かずに設定できるので、VBAに慣れていない人でも扱いやすい方法です。
ただし、複雑な条件分岐やエラー処理を入れたい場合は、VBAの方が柔軟に対応できます。
VBAで設定する場合は、クリック時イベントにイベントプロシージャを作成し、`DoCmd.OpenQuery`でクエリを実行します。
たとえば、追加クエリ「Q_追加クエリ」を実行する基本形は次のようになります。
“`vba
Private Sub cmdAddRecords_Click()
DoCmd.SetWarnings False
DoCmd.OpenQuery “Q_追加クエリ”
DoCmd.SetWarnings True
MsgBox “レコードの追加が完了しました。
“, vbInformation, “処理完了”
End Sub
“`
このコードでは、`DoCmd.OpenQuery`で指定したクエリを実行しています。
`DoCmd.SetWarnings False`は、Accessが表示する確認メッセージを一時的に非表示にする命令です。
処理後に`DoCmd.SetWarnings True`で元に戻している点が重要です。
これを戻し忘れると、他の重要な警告まで表示されなくなる可能性があります。
また、最後に`MsgBox`を表示することで、ユーザーに処理完了を知らせられます。
データ件数が多い処理では、クリック後に無反応に見えると何度もボタンを押される恐れがあるので、完了メッセージは重複実行を防ぐ意味でも有効です。
より安全にするなら、エラーが発生しても警告表示を必ず元に戻す処理を入れます。
たとえば、`On Error`を使ってエラー時の処理を用意しておくと、途中でクエリ実行に失敗してもAccessの警告設定がFalseのまま残るリスクを下げられます。
業務用のAccessでは、単に動くコードではなく、失敗したときにどう戻すかまで考えておくことが大切です。
“`vba
Private Sub cmdAddRecords_Click()
On Error GoTo ErrHandler
DoCmd.SetWarnings False
DoCmd.OpenQuery “Q_追加クエリ”
DoCmd.SetWarnings True
MsgBox “レコードの追加が完了しました。
“, vbInformation, “処理完了”
Exit Sub
ErrHandler:
DoCmd.SetWarnings True
MsgBox “処理中にエラーが発生しました。
” & vbCrLf & Err.Description, vbExclamation, “エラー”
End Sub
“`
レコード追加ボタンを安全に運用するための注意点
Accessフォームのボタンで追加クエリを実行する場合、一番注意したいのが**重複登録**です。
追加クエリは一度実行すると、対象レコードが追加先テーブルに登録されます。
基本的に「元に戻す」操作はできないので、同じボタンを何度もクリックすると、同じデータが繰り返し追加される可能性があります。
これを防ぐには、追加先テーブルに主キーや一意インデックスを設定し、同じIDや同じ伝票番号が複数登録されないようにする設計が重要です。
Accessのフォーム側だけで防ぐのではなく、テーブル設計でも守るという考え方が安全です。
追加クエリを作成する段階では、追加元フィールドと追加先フィールドの対応も確認してください。
フィールド名が同じであればAccessが自動で対応付ける場合がありますが、名前が違う場合は手動で追加先フィールドを指定する必要があります。
また、フィールド名が合っていても、データ型が合っていなければエラーの原因になります。
たとえば、数値型のフィールドに文字列を追加しようとすると失敗する可能性があります。
日付、数値、短いテキスト、長いテキストなど、追加先テーブルの設計に合わせて元データを整えておくことが大切です。
実行前に、選択クエリとして結果を確認してから追加クエリに変換する手順も有効です。
最初から追加クエリとして作るのではなく、まず「どのレコードが対象になるのか」をデータシートビューで確認し、抽出条件が正しいことを確かめます。
そのうえでクエリの種類を「追加」に変更し、追加先テーブルとフィールド対応を設定します。
特に「処理済みだけを履歴テーブルへ追加する」「今日入力したデータだけを登録する」といった条件付きの処理では、抽出条件の確認が欠かせません。
安全に運用するためのポイントをまとめると、次のようになります。
– 追加クエリ実行前に、対象レコードを選択クエリで確認する
– 追加先テーブルには主キーや一意インデックスを設定する
– フィールドの対応関係とデータ型を事前に確認する
– ボタン連打を防ぐため、完了メッセージや実行確認を用意する
– 実データで試す前に、バックアップやテスト用データベースで検証する
また、Accessではデータベースが無効モードになっていると、マクロやVBA、アクションクエリがブロックされることがあります。
ボタンを押しても何も起きない場合は、画面上部のメッセージバーに「コンテンツの有効化」が表示されていないか確認してください。
ただし、信頼できないファイルでコンテンツを有効化するのは危険です。
社内で使うファイルであれば、信頼できる場所に保存する、配布元を明確にするなど、セキュリティ面も含めて運用ルールを整えておくと安心です。
実務で使いやすいボタン設計とトラブル防止のコツ
Accessフォームにボタンを作成してクエリ実行やレコード追加を行う仕組みは、作るだけなら難しくありません。
しかし、実務で長く使うには、利用者が迷わない画面設計と、誤操作を防ぐ工夫が必要です。
ボタンの標題は「実行」だけではなく、「未登録データを顧客マスタへ追加」「処理済み案件を履歴へ移動」のように、何が起こるか分かる表現にしましょう。
処理対象が限定される場合は、フォーム上に対象期間や対象件数を表示しておくと、クリック前に利用者が内容を確認できます。
ボタンの配置も重要です。
データを変更しない「検索」「プレビュー」「フォームを開く」などのボタンと、データを変更する「追加」「更新」「削除」などのボタンは、色や配置を分けると誤操作を減らせます。
Accessではコマンドボタンの背景色、ポイント時の色、クリック時の色などを設定できるので、登録系のボタンは目立たせつつ、削除系のボタンは確認を促すデザインにするなどの工夫ができます。
ただし、色だけに頼ると分かりにくい場合もあるので、ボタン名と説明文を組み合わせて判断できるようにするのが理想です。
処理完了後の動きも設計しておきましょう。
追加クエリを実行した後にフォームを再表示する、一覧を再クエリする、追加元のワークテーブルを空にするなど、業務の流れに合わせた後処理があると使いやすくなります。
たとえば、入力用の一時テーブルから本番テーブルへレコードを追加したあと、同じデータが画面に残ったままだと、利用者が「まだ登録されていない」と誤解して再実行する可能性があります。
VBAで`Me.Requery`を使って表示を更新したり、必要に応じて追加元データを削除する処理を組み合わせたりすると、運用上の混乱を減らせます。
最後に、ボタンに登録するクエリ名やボタン名は、後から見ても意味が分かる名前にしておくことをおすすめします。
「クエリ1」「コマンド6」のような名前のままだと、修正時にどの処理なのか判断しづらくなります。
「Q_売上追加」「cmdAddSales」のように、種類と目的が分かる命名にしておくと、メンテナンス性が高まります。
Accessは小さな業務改善から始めやすいツールですが、データを変更する処理ほど慎重な設計が必要です。
フォームのボタン化は、操作を簡単にするだけでなく、正しい手順を画面に組み込むための仕組みとして活用すると効果的です。
広告
