Excel、Word などの他の Microsoft 製品と同様に、Access でも VBA(Visual Basic for Application)を使うことができます。
自分自身 Excel で VBA を使う頻度は高いですが、Access では経験がありませんでした。
VBA 自体は Excel を通して理解しているつもりなので、習うより慣れろということで Access で VBA を使うケースを考えて実践してみました。
1、費用を整理するシステム
今回作った費用を整理するシステムは以下のテーブル、クエリ、フォームで成り立っていす。
●テーブル: 科目コード、出費、摘要
●クエリ: 出費明細
●フォーム: 出費明細、摘要
システムの概要
システムの使い方を説明します。
「出費明細」フォームを開いて出費ごとに以下を登録します。
日付、科目コード、科目名、摘要、金額
科目名については科目コードを入力すれば、該当するものが表示されるので手入力不要です。
摘要については、横のコマンドボタンをクリックすれば「摘要」フォームが表示されるのでそ、こから該当するものを選択します。
以下①~⑤の順番で操作することになります。
「出費明細」フォーム↓
「摘要」フォーム↓
登録した出費については、「出費」テーブルに記録されて行きます。
「出費」テーブルのデータシートビュー↓
「出費明細」クエリでも登録したデータを確認できます。
「出費明細」クエリのデータシートビュー↓
リレーションシップ
リレーションシップは以下↓のように設定しています。
「出費」テーブルにデータが集約される構造になっています。
参照整合性(1対多)の設定により
・「出費」テーブルの「科目コード」は「科目コード」テーブルに登録されているデータでなければ入力できず
・「出費」テーブルの「摘要」は「摘要」テーブルに登録されているデータでなければ入力できません
テーブル
テーブルは「科目コード」「出費」「摘要」の3つです。
メインは「出費」テーブルです。
「出費」テーブル
「出費」テーブルのデザインビュー↓
「出費」テーブルのデータシートビュー↓
「科目コード」テーブル
「科目コード」テーブルのデザインビュー↓
「科目コード」テーブルのデータシートビュー↓
「摘要」テーブル
「摘要」テーブルのデザインビュー↓
「摘要」テーブルのデータシートビュー↓
クエリ
「出費」テーブルと「科目コード」テーブルから、選択クエリである「出費明細」クエリを作ってあります。
以下のフィールドを選択してあります。
・「出費」テーブルの「日付」フィールド
・「出費」テーブルの「科目コード」フィールド
・「科目コード」テーブルの「科目名」フィールド
・「出費」テーブルの「摘要」フィールド
・「出費」テーブルの「金額」フィールド
「出費明細」クエリのデザインビュー↓
「出費明細」クエリのデータシートビュー↓
フォーム
フォームは「出費明細」「摘要」の2つです。
「出費明細」フォームをデータの入力のために使っています。
(「出費明細」フォームから入力したデータが「出費」テーブルの中に入って行く)
「出費明細」フォーム
「出費明細」フォームは「出費明細」クエリを元にして作ってあります。
「出費明細」クエリで選択した全ての項目を入力するようになっています。
「出費明細」フォームのデザインビュー↓
「出費明細」フォームのフォームビュー↓
「摘要」フォーム
「摘要」フォームは「出費」フォームから呼び出して「摘要」を選択するために使用します。
「摘要」フォームのデザインビュー↓
「摘要」フォームのデータシートビュー↓
2、フォームを開いて項目を選択することができる Access VBA
さて、今回お話ししたい箇所である Access VBA をどこで使っているのか説明しますね!
「出費明細」フォームで摘要を入力する際に、「摘要」フォームを開いてその中から選択できるようにしてあります。
「出費明細」フォームのコマンドボタンに組み込んだプログラミングコード
「出費明細」フォーム上に設置してあるコマンドボタンをクリックすると、摘要フォームが開きます。
「出費明細」フォームのコマンドボタンに「摘要」フォームを開くプログラミングコード(VBA)が組み込んであるのです。
コードの編集の仕方を説明します。
「出費明細」フォームをデザインビューで開き、コマンドボタンを選択します。すると、右側にプロパティシートが出てくるので「イベントプロシージャ」を選択した後、その横の「…」をクリックします。
するとエディタが開くのでここにコードを書き込みます。
今回書き込んだコードは以下の通りです。
——————————-
Private Sub コマンド11_Click()
DoCmd.OpenForm “摘要”
End Sub
——————————-
「DoCmd.OpenForm “摘要”」は”摘要”という名前のフォームを開くという命令になります。
これにより「摘要」フォームが開きます。
「摘要」フォームのコマンドボタンに組み込んだプログラミングコード
さて、「摘要」フォームでは該当する摘要をコマンドボタンをクリックすることで選択します。
これにより、選択した摘要が「出費明細」フォームの「摘要」に入ってきます。
例えば「切手代」を選択すればそのように入ってきます↓
さて、上記のように「摘要」フォームで選択した摘要を「出費明細」フォームに表示させるために、プログラミングコードを「摘要」フォームのコマンドボタンに入れ込む必要があります。
コードの編集の仕方を先と同様です。
「摘要」フォームをデザインビューで開き、コマンドボタンを選択します。すると、右側にプロパティシートが出てくるので「イベントプロシージャ」を選択した後、その横の「…」をクリックします。
するとエディタが開くのでここにコードを書き込みます。
今回書き込んだコードは以下の通りです。
——————————-
Private Sub コマンド3_Click()
Forms!出費明細!摘要 = Me!摘要
DoCmd.Close
End Sub
——————————-
「Forms!出費明細!摘要 = Me!摘要」により、「出費明細」フォームの「摘要」という名前のテキストボックスに、「摘要」フォームの「摘要」という名前のテキストボックスの値を入れ込むことになります。
「Forms!出費明細」までで「出費明細」フォームを意味し、「Forms!出費明細!摘要」で「出費明細」フォームの「摘要」という名前のテキストボックスを意味します。
「出費明細」フォームの中のテキストボックスの名前の編集は、まずテキストボックスを選択しプロパティシートの「名前」を変更することによって対応します。
また、「Me」 というのは自分自身のこと、つまりここでは「摘要」フォームのことを意味するんですね!
「DoCmd.Close」により、「摘要」フォームを閉じることを意味します。
つまり、これらのコードにより「摘要」フォームを開いて摘要の選択が完了したら「摘要」フォームを閉じるということになるのですね。
3、まとめ
Access VBA を使ってフォームを開いて項目を選択する方法について、費用を整理するシステムを実例にして説明しました。
Access の場合、Excel と違ってまずは仕組み(テーブル、クエリ、フォームなどの使い方)によりシステムの大部分が出来上がっていきます。
VBA はこれらの仕組みを補完するために使うイメージでしょうか。
Excel のように長〜いプログラミングコードを書くことは少なそうです(今感じている限りにおいては)。