トップ > スキル : アプリケーション > VBA for Access > 実践編(在庫管理データベースの作成2)
「入庫処理フォーム」の作成
入庫処理フォームは、出庫処理フォームとほぼ同じです。次の操作を行って入庫処理フォームを作成します。
① 出庫処理フォームを選択して、コピー、そして貼り付けを行います。名前を「入庫処理フォーム」にします。

② 入庫処理フォームをデザインビューで開き、背景色を変更します。色は任意です。

③ [OK]ボタンのイベントプロシージャを書き換えます。[OK]ボタンをクリックして、[プロパティシート]を開きます。[イベント]タブを選択し、[クリック時]が「イベントプロシージャ」となっていることを確認します。

④ [クリック時]プロパティのビルドボタンをクリックして、VBE画面に切り替え、下の図のように書き換えます。(引き算を足し算にするだけです)

[フォーム]内のタイトルラベル(見出し)と[フォーム]プロパティシートの[標題]プロパティを「入庫処理フォーム」に変更します。
これで、入庫処理フォームは完成しました。フォームは上書き保存をして閉じておきます。
在庫照会フォームから各フォームを呼び出す
必要なフォームができたら、在庫照会フォームから入庫用と出庫用のフォームを呼び出すためのプロシージャを作成します。
次の操作を行って、各ボタンのイベントプロシージャを作成します。
① 「在庫照会フォーム」をデザインビューで開きます。
② 「出庫」ボタンを選択して、プロパティシートを表示します。そして、[イベント]タブの[クリック時]プロパティを選択してビルドボタンをクリックします。
③ [コードビルダ]を選択して、VBE画面を表示します。次のコードを入力します。

④ 同様な操作を行って、「入庫」ボタンには、次のコードを入力します。

以上で、すべて完成しました。次に動作を確認します。上書き保存をして、フォームビューに切り替えます。
OpenFormメソッド
OpenFormメソッドは、VBAからフォームを開くアクションを実行するメソッドです。
Docmd.OpenForm FormName, View, FilterName, WhereCondition, DataMode, WindowMode, OpenArgs
- FormName/フォーム名(必須)
開くフォーム名を指定します - View/ビュー(省略可能)
ビューを①の定数で指定します。省略時は、プリンタへ印刷されます。 - FilterName/フィルタ名(省略可能)
レコードソースに使うクエリを指定します。 - WhereCondition/レコード抽出条件(省略可能)
テーブルやクエリと連結しているときのレコード抽出条件を指定します。 - DataMode/追加・編集モード(省略可能)
データの入力モードを②の定数で指定します。 - WindowMode/ウィンドウの状態(省略可能)
ウィンドウモードを③の定数で指定します。 - OpenArgs/レポートへの引き渡しデータ(省略可能)
レポートのOpenArgsプロパティへ設定する内容を指定します。
View(第2引数)に指定する定数
acDesign | デザインビューで開きます。 |
acFormDS | データシートビューで開きます。 |
acFormPivotChart | ピボットチャートビューで開きます。 |
acFormPivotTable | ピボットテーブルビューで開きます。 |
acNormal | フォームビューで開きます。(省略時と同じ) |
acPreview | 印刷プレビューで開きます。 |
DataMode(第5引数)に指定する定数
acFormAdd | 新しいレコードを追加できます。ただし、既存のレコードの編集はできません。 |
acFormEdit | レコードの編集・追加が自由に行えます。 |
acFormPropertySettings | フォームのプロパティで設定されている通りにレコード編集・追加が行えます(規定値)。 |
acFormReadOnly | レコードの参照だけが行えます。 |
WindowMode(第6引数)に指定する定数
acDialog | フォームの「作業ウィンドウ固定(Modal)」プロパティと「ポップアップ(PopUp)」プロパティが「はい(Yes)」の状態で開きます。 |
acIcon | フォームが最小化され、Windows タスクバーに収まります。 |
acHidden | 非表示になります。 |
acWindowNormal | フォームのプロパティで設定されているモードで開きます(規定値)。 |
【Where句の書き方手順】
- ① フォーム名、コントロール名(テキストボックス名)を確認する。
- 開くフォーム:出庫処理フォーム
開くフォームの中の、キーとなるフィールド:商品番号 - ② 基本部分の式を書いてみる。
- 商品番号=Me!商品番号
- ③ 比較する商品番号はテキスト型なので、文字列として扱うため、右辺をダブルクォーテーション
で囲む。 - 商品番号=″Me!商品番号″
- ④ 式全体を文字列として扱うので、ダブルクォーテーションで囲む。
- ″商品番号=″Me!商品番号″″
(これは、開いた先の商品番号=このフォームの商品番号を意味する式) - ⑤ ダブルクォーテーションを二重につけることができないので、内側のダブルクォーテーションは
シングルクォーテーションに変更する。 - ″商品番号=′Me!商品番号′
- ⑥ 右辺の「このフォームの商品番号」という書き方の部分だけダブルクォーテーションの外に出す。
- ″商品番号=′ Me!商品番号 ′″
- ⑦ それぞれのダブルクォーテーションを閉じる。
- ″商品番号=′″ Me!商品番号 ″′
- ⑧ 3つに分かれた式を&で結ぶ。
- ″商品番号=′″ & Me!商品番号 & ″′
動作の確認
在庫照会フォームをフォームビューで開き、商品名「コーヒー」の数量が「193」であることを確認します。
① 「出庫」ボタンをクリックします。

② 「出庫処理フォーム」が開きます。
「数量」テキストボックスに「20」と入力して、[OK]ボタンをクリックします。

③ メッセージが表示されます。
[はい]ボタンをクリックします。

④ 「コーヒー」の在庫数が「173」となり、「20」減算されたことが確認できます。

⑤ 次に商品名「ココア」の[入庫]ボタンをクリックします。「入庫処理フォーム」が表示されるので、「数量」テキストボックスに「50」と入力して、[OK]ボタンをクリックします。

⑥ メッセージが表示されます。
[はい]ボタンをクリックします。


⑦ 「ココア」の在庫数が「147」となり、「50」加算されたことが確認できます。
あとは、それぞれ、キャンセルボタンが押された時、確認画面で[いいえ]ボタンをクリックしたときの動作も確認しておきます。
以上で在庫管理DBは完成です。まだ、いろいろな箇所で修正が必要な場面も出ると思いますが、通常の業務であれば、これである程度は活用できます。
さらに、さまざまな項目名や科目が必要であれば、それらをテーブル内に追加します。今回のテーブルは1つですので、作りやすい例です。商品のメーカー名も入れたいとなると、メーカーのマスターテーブルを追加することになります。しかし、それはあくまでも参照元となるテーブルですから、現フォームには特に影響はありません。
VBAで自動化できるように作り上げることで、誰でも扱え、操作性が優れたデータベースになります。ただ、Accessを勉強して、すぐにVBAを勉強することはあまり好ましくありません。まずは、Accessでできることは、Access自体で作成し、簡単な自動化であればマクロで作ります。
マクロを使っても実現できない自動化をVBAで作り上げるように順を追って、使い分けることが大事です。