前回までに、データの保存先であるテーブルの構造について紹介をしてきました。
今回は、ユーザーが効率良くデータ入力をできるようにフォームの設計をしていきます。ポイントは、いかに少ない作業量で適切なデータを登録できるようにするかという点です。
まず、効率良く入庫及び出庫データの登録、在庫情報の確認をできることを目的とします。
さらに、テーブルとフォームを直接リンクはせずに、フォーム上に入力した情報をもって整合性等の確認を行い、異常がなければテーブルに登録する仕組みを設けることとし、VBAによりソースコードを記述することで実現化します。
また、フォームの作成方法(今回作成するフォームの名称は「F_メイン」とします。)、VBAを利用したフォームの操作については以下の記事をご参照ください。
入庫データ登録画面の設定
入庫データを登録するためのオブジェクトを配置します。ここで、これまでに作成した「T_入庫」テーブルにおいて、「入庫ID」フィールドはオートナンバー型であり、レコード情報が追加されると自動で付番されるため、フォーム上での設定は不要です。
入庫登録日はレコード登録を実施した日を自動で入力するようにします。
また、品目情報と担当者情報は、フォーム上にリストを表示させて、選択できるようにします。
以上の要件をフォームに実現していきましょう。
図1に示すように、フォームデザインからテキストボックス、コンボボックス及びコマンドボタンを配置します。
なお、入庫数を入力するテキストボックスを「t_入庫数」、品目情報を入力するコンボボックスを「t_品目情報」、担当者情報を入力するコンボボックスを「t_担当者情報」という名称にします。また、入庫処理を開始するためのコマンドボタンを「cmd_入庫処理」という名称にします。
次に、ユーザーがコンボボックスで情報を選択、入庫数をテキストボックスに入力し、コマンドボタンをクリックした段階で、VBAによる処理が開始するようにします。繰り返しますが、入庫登録日はレコードを追加する際にVBA側で自動で情報を登録するようにします。
VBAソースコード 入力内容の確認
「cmd_入庫処理」コマンドボタンのクリックを、入庫処理の開始イベントとします。まず、「cmd_入庫処理」コマンドボタンを右クリックし、プロパティを開き「クリック時」の項目で「イベントプロシージャ」を設定します。この状態で「…」ボタンをクリックすると、VBA画面が起動します(図2参照)。
まずは、品目情報、入庫数、 担当者情報が入力されているかの確認をします。次のようにソースコードを記述します。
Public Sub cmd_入庫処理_Click() '以下のIf文を追記する。 '品目情報が入力されていないと処理中止 If Me.t_品目情報 = "" Or IsNull(Me.t_品目情報) Then 'Nullか未入力かどちらかで処理中止 MsgBox "品目情報が選択されていません。" Exit Sub '入庫数が入力されていないと処理中止 ElseIf IsNumeric(Me.t_入庫数) = False Then MsgBox "入庫数が正しく入力されていません。(半角数字で入力)" Exit Sub '担当者情報が入力されていないと処理中止 ElseIf Me.t_担当者情報 = "" Or IsNull(Me.t_担当者情報) Then MsgBox "担当者情報が選択されていません。" Exit Sub End If End Sub
これにより、不適切なデータ入力されていると処理を中止します。
フォーム上での入力内容に不備がなければ、T_入庫テーブルにデータを登録していきます。まずは、参照設定(VBA画面のツールタブ中)を開き、Microsoft ActiveX Data Objects 6.1 Libraryにチェックを入れます(最新のバージョンがあれば、そちらにチェックをしてください。)。続いて、ADOを用いて、データ登録を行いますので、先に入力したソースコードの下に以下のソースコードを追記してください。
Public Sub cmd_入庫処理_Click() '品目情報が入力されていないと処理中止 If Me.t_品目情報 = "" Or IsNull(Me.t_品目情報) Then 'Nullか未入力かどちらかで処理中止 MsgBox "品目情報が選択されていません。" Exit Sub '入庫数が入力されていないと処理中止 ElseIf IsNumeric(Me.t_入庫数) = False Then MsgBox "入庫数が正しく入力されていません。(半角数字で入力)" Exit Sub '担当者情報が入力されていないと処理中止 ElseIf Me.t_担当者情報 = "" Or IsNull(Me.t_担当者情報) Then MsgBox "担当者情報が選択されていません。" Exit Sub End If '以下のソースコードを追記する。 Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset 'カレントデータベースへの接続 Set cn = CurrentProject.Connection 'T_入庫テーブルを開く rs.Open "T_入庫", cn, adOpenKeyset, adLockOptimistic 'レコードセットの登録(フィールド指定は、rs!~と記載する。) rs.AddNew rs!入庫数 = Me.t_入庫数 'rs!~: 対象テーブルのフィールド名を指定する。 rs!入庫年月日 = Now() rs!品名 = Me.t_品目情報 rs!担当者 = Me.t_担当者情報 'Updateで情報登録が完了する。 rs.Update 'テーブルを閉じる。 rs.Close 'T_在庫テーブルを開く rs.Open "T_在庫テーブル", cn, adOpenKeyset, adLockOptimistic 'レコードセットの登録(フィールド指定は、rs!~と記載する。) rs.AddNew rs!在庫数 = Me.t_入庫数 '入庫は在庫に対してプラスの処理。 rs!在庫年月日 = Format(Now(), "yyyy/mm/dd") '時間情報は登録しない。 rs!品名 = Me.t_品目情報 'Updateで情報登録が完了する。 rs.Update 'テーブルを閉じる。 rs.Close 'データベース接続を閉じる。 cn.Close 'ガーベージコレクション Set rs = Nothing Set cn = Nothing MsgBox "処理を完了しました。" End Sub
以上のソースコードを記入後、早速データ登録を行いましょう。
入庫情報の登録
これまでに作成したフォームを用いて、「T_入庫テーブル」及び、「T_在庫テーブル」に情報を登録してみましょう。まずは、図3に示すように、フォーム上でデータを入力します。
続いて、「入庫登録」コマンドボタンをクリックすると、処理が開始され、最終的に「処理を完了しました。」というメッセージボックスが表示されます。
この後に、「T_入庫テーブル」及び「T_在庫テーブル」を確認すると、先ほどフォーム上に入力したデータが反映されていると思います。
まとめ
今回は、在庫管理をするデータベースの入庫情報登録に係るフォームの作成方法について、紹介をしました。ADOを用いた処理、If文を用いた入力データの妥当性確認について、紹介をしました。その他にも、データ登録前の処理ルーチンにより、詳細なデータ評価を行うことも可能です。
次回は、出庫に係る処理方法について紹介をいたします。
スポンサーリンク
コメント