前回、採番システムで要求する機能について検討をしてきましたので、今回からフォームの作成方法について見ていきましょう。
なお、フォームの基本的な作成方法については過去の記事が参考になると思いますので、併せてご確認ください。
スポンサーリンク
文書分類設定画面までの設定方法
まずは、フォームを作成していきます。なお、今回作成するフォームの名前は「F_Main」としますので、作成後保存を忘れないようにお願いします。
図1に示すようにフォームデザインアイコンをクリックして新規に作成をします。続いて、図1の赤丸に示す箇所を右クリックし、フォームのヘッダー/フッターを追加します。
続いて、フォームのタイトル表示にラベルを、さらに文書管理コードと年度を表示するためのテキストボックスを追加します。この際に、フォームのセクション幅も広げます。
テキストボックスとして追加する際、文書管理コードは番号体系に即してリストから選択できるようにするため、後程コンボボックスに変更します。
また、年度テキストボックスに対しては、自動で当該年度を取得できるような処理を施しますが、本テキストボックスには数値以外の値が入ることはありませんので、禁制処理の目的も兼ねて「書式」プロパティには「数値」を設定します。
ここで、テキストボックスからコンボボックスへの変更方法は図3に示すとおりで、対象テキストボックスを右クリックし、「コントロールの種類の変更」→「コンボボックス」と選択することで切り替わります。
変更したコンボボックスで、文書管理コードをリスト表示できるように設定をしていきます。基本的な設定内容は過去の記事(上述)で紹介していますので、そちらを参考にしていただければと思いますが、今回の設定内容は図4に示すとおりです。
まずは、t_文書管理コードのプロパティシートを開き、列数は「2」、列幅は「2cm;3.8cm」、値集合ソースは「T_項目マスタ」、値集合タイプは「テーブル/クエリ」、入力チェックは「はい」にします。
[ad]
入力画面の設定
次に、文書管理に係る値を入力するためのテキストボックスを配置します。今回作成するシステムでは、フォームを介してテーブルに直接値を入力するのではなく、テキストボックスに各値を入力し、これらをチェックした後にテーブルに値をインポートする方法を採ります。
このため、値を入力するためのテキストボックスを図5に示すように配置します。
図のように各ラベル、テキストボックスを追加し、テキストボックスは左から「t_連番」、「t_文書題目」、「t_作成者」、「t_作成日」と名付けました。
また、立体表示プロパティを「埋め込み」としました。
テーブルとのリンク
続いて、文書管理コードと年度の情報から必要情報をフォームに表示するための準備をしていきます。まず、フォームを選択するために図6に示す赤丸箇所をクリックします。そしてフォームのプロパティシート上、レコードソースにSQL文を設定するためのクエリビルダーを開きます。
クエリビルダーでは必要テーブルを選定する必要がありますので、ここでは、「T_管理」テーブルを追加します。
クエリビルダーが開くと、ここからは一般的な選択クエリの設定方法と同様になります。
【フィールド】項目には、「文書管理コード」、「年度」、「連番」、「文書題目」、「作成者」及び「作成日」フィールドを追加します。そして、レコードはフォーム上の文書管理コードと年度から抽出できるように、「文書管理コード」フィールドの抽出条件に「Forms!F_Main.t_文書管理コード」を、「年度」フィールドの抽出条件に「Forms!F_Main.t_年度」を追加します。
クエリビルダーでの設定が終了した後、閉じるアイコンをクリックし図9に示すように処理を完了させます。
帳票画面の設定
フォームの詳細セクションでは、単票表式と帳票表式を選択することができます。単票表式の場合は、画面に1レコードの値を羅列する方法で、帳票式は多数のレコードを表形式で表示するものです。
今回の場合、文書管理に係るデータを帳票で確認できるようにした方が視認性が良くなりますので、このための設定として既定のビュープロパティに「帳票フォーム」を設定します。
さて、ここまででレコードは帳票形式で表示されるようになりましたので、先にクエリビルダーで設定したフィールドを踏まえてテキストボックスを配置していきます。
図11に示すように、詳細セクションに各テキストボックスを追加します。テキストボックスは左から「連番」、「文書題目」、「作成者」、「作成日」と名付け、コントロールソースプロパティもテキストボックスの名前と一緒にします。
※コントロールソースは先に設定したSQL文中フィールドの参照先に一致しています。
これで、フォームを起動すると、コントロールソースに合わせた値を表示するようになります。ただし、文書管理コードと年度の値に基づいたレコード抽出が必要になりますので、これらの設定を行います。
年度の取得方法
フォーム上に設定した「t_年度」テキストボックスに対し、フォームを起動した際に当該年度を取得するための処理を実装します。
フォームを読み込んだ際に処理をするように、フォームの読み込み時プロパティにイベントプロシージャを設定します。
そして、VBA画面では次のソースコードを追記します。
Private Sub Form_Load() 'ここからコードを追記 If Month(Date) = 1 Or Month(Date) = 2 Or Month(Date) = 3 ThenMe.t_年度 = Year(Date) - 1
ElseMe.t_年度 = Year(Date)
End If End Sub
上記ソースコードは、Date関数により当日の年月日を取得し、Month関数から月の値を取得します。ここで、1月、2月、3月の場合は年度処理をする際に当該年から1年さかのぼる必要があるため、その処理を実装しています。
一方で、4月から12月は当日の年を取得することで事足ります。
以上から、本ソースコードでは当日の月情報から年度の値を「t_年度」に付与するようにしています。
また、「t_年度」テキストボックスを任意に数値を入力することができるようにしていますが、ブランクあるいはNullも許容されてしまいます。この場合、採番する際に齟齬が生じますので、ユーザーには数値を入力してもらうようにアラートを出すようにします。
Private Sub t_年度_AfterUpdate() If Me.t_年度 = "" Or IsNull(Me.t_年度) ThenMsgBox "年度を西暦で入力してください。"
Exit Sub
End If End Sub
文書番号取得後の処理
フォーム上の文書番号を取得した後、対象となるレコードを表示するために、更新処理が必要となります。
したがって、「t_文書管理コード」の更新後処理プロパティにイベントプロシージャを設定し、ソースコードを追記します。ここでも先と同様にブランクあるいはNullに対するメッセージを表示するようにします。
Private Sub t_文書管理コード_AfterUpdate() If Me.t_文書管理コード = "" Or IsNull(Me.t_文書管理コード) ThenMsgBox "文書管理コードを選択してください。"
Exit Sub
End If Me.Requery End Sub
その他の処理として、自身のフォームをリクエリー(Requery)するというものを記載しています。
これにより、文書管理コードを設定した都度、リクエリーにより画面が更新されます。この処理はt_年度にも同様に実装します。
ここで、「T_管理」テーブルに次のサンプルデータを登録して、これまでの処理がスムーズにいくかを確認してみましょう。
サンプルデータ
サンプルデータとして「T_管理」テーブルにレコードを登録します。
ID | 文書管理コード | 年度 | 連番 | 文書題目 | 作成者 | 作成年月日 |
1 | DES | 2020 | 1 | TEST1 | 山田太郎 | 2020/7/30 |
2 | PLN | 2020 | 1 | TEST1 | 山田太郎 | 2020/7/30 |
3 | DES | 2020 | 2 | TEST2 | 坂本花子 | 2020/8/1 |
サンプルデータを登録した後、「F_Main」フォームを開き、年度に「2020」が入力されていることを確認します。続いて、文書管理コードに「DES」を選択すると画面が更新されて、図13に示す抽出結果が示されると思います。
ここまでで、文書管理コードと年度により文書番号が抽出されて出力されるように設定することができました。
まとめ
今回は採番システムの内、フォーム上のデータ出力を主に設定してきました。次回は、データ登録の方法について紹介していきます。
フォームの作成については過去の記事を参考として示しましたが、説明が不十分なこともあるかと思いますので、専門書も用意して確認をしてしていただけると幸いです。
スポンサーリンク
コメント