第2回です。
Accessで、「得意先マスター保守」処理画面を作成してみるです。
顧客管理や請求管理をするうえで、必要なのが、得意先の情報を蓄えたマスターが必要になりますので、是非、得意先マスターの作り方や便利な検索方法を学習してください。
ポイントは、項目の定義(テーブル)が終わっていれば、画面の項目のレイアウトは、何も難しい事ではありません、画面レイアウトを自動で生成してくれる機能もウイザードを使えばできますので、後は地道に、大きさやレイアウトを自分で、修正して決めてゆけば良いだけです。
<注意事項>——————————————————-
本連載の「知識レベル」は、
・「ACCESS」の画面、帳票等をウイザードを使用して、画面や帳票が作成することができる。
・あと「ボタン」の取り付け方等も理解している。
・データ「テーブル」を定義して、画面のウイザードで、項目を画面上に生成できる。
これ以下の操作レベルですと、「説明する内容を記載する部分が何ページあっても足りません」ので勘弁してください。簡単な書籍を購入して、まず操作を覚えてからにして下さい。
———————————————————————
大事なのは、自分で作成した機能の埋め込まれた「ボタン」をクリックした時の動作ですが、自分で一からプログラムコード記述しなくても、サンプルを使えば良いだけです。
「ボタン」をクリックしたときに、定型的に動くオブジェクトコード(VB)をCOPYして埋め込む方法です。 動きは、共通ですので、コードを観て、修正する必要のある個所は、読み込むファイルの名前などを修正して動かせば、すぐ動くと思います。
「新規入力」時に動くコード(プログラム)、「削除」時に動くコード、など、サンプルをCOPYして使えるものを記載していますので、自分で画面を作成して、ボタンを配置して、その中にコードをCOPYして動かせば分かります。
「ボタン」をクリックした時の各動作のコーディング例を記載していますので下記の記事を参照してみて下さい。
—関連記事—
・第8回 マイクロソフト ACCESSでデータベースを作成する時のプログラムソースのコーディングについて
Sponsored Links
1.サンプルプログラムの環境について
1)ACCESSのバージョン :2000形式のmdbで記載。
(2002、2003でもアプリが動きますので、2000形式で記述します)
Jetデータベース用の「DAO(Data Access Obiect)」を使用して記述します。
Accessを扱う上で、Jetデータベース、DAO、ADO(ActiveX Data Objects)、参照設定などのキーワードが出てきますので、基本的な事を、どんな意味なのかを認識しておくべきでしょう。これを分かっていないとトラブルが発生した時、解決するのが困難になるでしょう。
Windows10,11などは、最近は、ほぼ64bit版です。Accessは、32bit版と64bit版があり、どちらを使用するか自分で決められます。しかし、「オブジェクト」が違いますので、32bit版のAccessで作ったものは、64bit版のAccessで動かすと、エラーが発生して動きませんので注意です。
直すのは、VBのプログラムコードを面倒でも自分で直すしか有りません。
■尚、2010形式のaccdbを使用し、Jetデータベース用の「DAO」を使用する場合は、下記の記事を参照してください。
■テーブルを操作するコードを記述する時の注意事項
Recordsetの前に、dao.を付加しないとエラーになりますので注意 ”dao.Recordset”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Private Sub 新規_Click() On Error GoTo Err_新規_Click Dim db As Database, Rst As <span style="color: #ff6600;">DAO</span>.Recordset Dim newBango As Long, dbango As Long Dim i As Integer Dim 最後の管理番号 As Long '見積データの新規作成レコード位置に移動 DoCmd.GoToRecord , , acNewRec '見積管理番号テーブルを操作します。 Set db = CurrentDb Set Rst = db.OpenRecordset("T_見積管理番号", dbOpenDynaset) Rst.Edit 最後の管理番号 = Rst!見積管理番号 Rst!見積管理番号 = 最後の管理番号 + 1 Rst.Update Me![見積番号] = Rst!見積管理番号 Rst.Close: Set Rst = Nothing Exit_新規_Click: Exit Sub Err_新規_Click: MsgBox Err.Description Resume Exit_新規_Click End Sub |
—関連記事—
・第10回 Access2000(mdb)からAccess2010(accdb)に変換する
2.今回使用する「得意先マスター」の保守画面です。
自作のサンプル(得意先マスタ保守)を使用し、各機能別にコードを記載します。
■「新規入力」処理機能、「削除」処理機能
■登録されたデータの読み出し処理機能
■「住所検索」入力機能(第3回、第7回で説明)
■「封筒宛名印刷」処理機能
■登録済データの「一覧印刷」処理機能
データベース処理画面で、最初に作るのが、データエントリー(登録)画面ですね。
第2回目ですので、「新規入力」と「削除」のボタンをクリックされた時のオブジェクトコードについて説明します。
3.Accessで作成した「得意先マスタ」保守処理画面のサンプルです。
1)機能内容
■得意先の登録・削除処理機能
■顧客を名前で検索・抽出して、簡単に呼び出しマスタに表示する機能
■住所入力支援機能(住所の入力作業を省力化する機能もあります)。
■「請求書」などを郵送するための宛名「封筒印刷」処理機能。
2)得意先テーブル作成時のデータ情報
・使用するテーブル名 : T_得意先テーブル
・レコードキー : 得意先ID
3)データ項目
(1)得意先ID
(2)カナ名
(3)得意先名
(4)郵便番号
(5)住所1
(6)住所2
(7)電話番号
(8)FAX番号
(9)備考
(10)敬称
4.「新規入力」ボタン押下時の処理の埋め込み
1)新規入力 ボタン
まず、「新規入力」ボタンをクリックした時の「イベントプロシージャ」を開きます。
2)「新規入力」ボタンをクリックした時の「イベントプロシージャ」コードです。
「新規入力」ボタンを押されたときの「VBA」コード記述からはじめます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
Private Sub 新規入力コマンド_Click() On Error GoTo Err_新規入力コマンド_Click Dim newBango As Long Dim db As Database, Rst As Recordset Set db = CurrentDb ' データベースを開く Set Rst = db.OpenRecordset("T_得意先テーブル", dbOpenSnapshot) '登録するレコードのキーを作成 If Not Rst.EOF Then newBango = DMax("得意先コード", "T_得意先テーブル") + 1 Else: newBango = 1 ' レコードが1件もないため End If 'データベースのクローズ処理 Rst.Close: Set Rst = Nothing db.Close: Set db = Nothing Me.AllowAdditions = True '新しいレコードを新規作成(追加)する為のコード。 DoCmd.GoToRecord , , acNewRec '画面の新規レコードの得意先IDに、先ほど2)で作成した番号をセットする。 得意先コード = newBango Me.AllowAdditions = False Exit_新規入力コマンド_Click: Exit Sub Err_新規入力コマンド_Click: MsgBox Err.Description Resume Exit_新規入力コマンド_Click End Sub |
3)「新規入力」 ボタン押下時のコードの解説
<処理概要>
画面上の「新規入力」ボタンが押下された時、テーブル(T_得意先)を読んで、一番大きい得意先IDに+1しておき、新規レコードを起こして、その得意先IDを新規レコードのキーとしてセットする処理です。
これで、新規レコードが1件発生(登録)されて、得意先の各データ項目を入力する状態にします。
(1)データベースを開く
おきまりのパターンです。
オープンする「テーブル名」を書き換えるだけです。
(2)登録するレコードのキーを作成
「DMax」という最大値を取得する関数を使用して、登録されている得意先IDのなかで、
一番大きい数値の得意先IDに+1加算して、新規入力されたレコードのキー(得意先ID)を作成します。
<レコードのキーに付いての補足説明>
パソコン1台で使用する(スタンドアロン)場合は、良いのですが、Windowsのファイル共有機能を使い、複数台でデータベースを操作する場合には、競合しますので、テーブルのキー項目になる値は、別途テーブルを作成(番号デーブルなど)して、そのから番号を取得して、レコードのキー値を「採番」する方法がベストだと思います。
<例>
‘番号テーブルに+1して、番号テーブルにセット(更新)する。
banngo = banngo+1
‘+1した番号を新規レコードの番号(得意先ID等)に設定する
Newbanngo = banngo
得意先ID = Newbanngo
(3)データベースのクローズ処理
クローズ処理 これもおきまりの処理です(使用したメモリを解放しているだけです)。
(4)新しいレコードを新規作成(追加)する為のコード。
DoCmd.GoToRecord , , acNewRec
(5)画面の新規レコードの得意先IDに、先ほど2)で作成したIDをセットする。
最後は、得意先名にフォーカスをセットして終了です。
5.「削除」 ボタン押下時の処理の埋め込み
1)「削除」ボタンをクリックした時の「イベントプロシージャ」コード。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Private Sub 削除コマンド_Click() On Error GoTo Err_削除コマンド_Click Beep If MsgBox("表示中の得意先情報を削除します。", vbYesNo + 64 + vbDefaultButton2, "削除") = vbYes Then DoCmd.SetWarnings False DoCmd.RunCommand acCmdDeleteRecord DoCmd.SetWarnings True End If '最後のレコードに移動 DoCmd.RunCommand acCmdRecordsGoToLast Exit_削除コマンド_Click: Exit Sub Err_削除コマンド_Click: MsgBox Err.Description Resume Exit_削除コマンド_Click End Sub |
2)「削除」 ボタンをクリックした時のコードの解説
(1)’削除処理を実施する前に、「確認メッセージ」画面を表示して、「Yes/No」を選択させる。
削除処理は、ほとんどこのパターンで、COPYして貼り付ければ、完成します。
「はい(Y)」のボタンを押下したときに、表示中のレコードを削除する。
ほぼ、定型のコードですので、COPYして、そのまま使えるでしょう。
6.「得意先呼出」ボタン押下時の処理の埋め込み
せっかく、たくさん登録された「得意先データ」を、すぐに探し出せないと、意味がありませんよね。 そこで、エントリーしたデータを素早く、検索、表示する為の処理方法です。
「得意先マスタ」画面の「得意先呼出」ボタンをクリックすると「得意先検索」画面を表示する。
下記の画面では、抽出条件が「得意先名」1つですが、複数の条件を設置することも可能です。尚、「フォーム」の作成に関しては、自分でACCESSのウイザードを使用して簡単に作成してください。
1)処理機能の説明
(1)「得意先検索」画面の呼出
「得意先マスタ」画面で、「得意先呼出」のボタンを押されたときに、「得意先検索」画面を表示します。
(2)「得意先検索」画面での機能内容
①「得意先名」入力欄に入力する。
この抽出処理は、あいまい検索可能にしてありますので、名前の途中の文字(連続している文字列であれば可能)でも、該当すれば表示することが可能です。
②「抽出」ボタンを押すと、該当の得意先名を一覧表示する。
③データ選択後の処理
表示中のデータの中から、該当の得意先名を選択クリックすると、「得意先検索」画面を閉じて、「得意先マスタ画面」に該当データを表示する。
こうすることにより、大量に登録された得意先を「あいまい検索」で呼び出し、素早く選択、表示することが可能になります。
2)「得意先呼出」のボタンを押されたときに、「得意先検索」画面を表示するコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Private Sub コマンド31_Click() On Error GoTo Err_コマンド31_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "F_得意先読出フォーム" DoCmd.OpenForm stDocName, , , stLinkCriteria Exit_コマンド31_Click: Exit Sub Err_コマンド31_Click: MsgBox Err.Description Resume Exit_コマンド31_Click End Sub |
解説:
呼び出すフォーム名を書き換えて、そっくりそのままコピーすればできあがりです。
「On Error GoTo~」のコードは、エラー処理の定番で、エラーメッセージを表示して処理を終了させる。
3)「得意先検索」画面で、「抽出」ボタンを押すと、該当の得意先名を一覧表示するコード。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Private Sub コマンド10_Click() On Error GoTo Err_コマンド10_Click '変数を宣言し、空の文字列を代入 Dim stCri As String stCri = "" '[顧客名検索]が空の文字列ではないとき、変数に条件を格納 If (Me.得意先名検索 <> "") Then stCri = stCri & "[得意先名] Like " & " '*" & Me.得意先名検索 & "*'" End If 抽出処理: Me.Filter = stCri Me.FilterOn = True コマンド10_Click_Exit: Exit Sub Err_コマンド10_Click: MsgBox Error$ Resume コマンド10_Click_Exit End Sub |
解説:
検索用の項目名 : 得意先名検索
得意先テーブルの項目名 : 得意先名
——————————————————-
(1)[顧客名検索]が空の文字列ではないとき、変数に条件を格納
・”得意先名検索”が空白でなければ、「stCri」に入力された抽出条件を設定する。
ここの部分のコードも、「あいまい」検索機能を持った「定番」のコードですのでCOPYすればOK。
(2)抽出処理:
そして、フィルターにセットして、フィルターをオンにすると抽出されて一覧に表示されます。
<補足>
抽出後のデータを印刷したい場合、印刷処理ボタンを配置して一覧印刷処理を追加することもできます。
4)「得意先検索」画面で、表示中のデータの中から、該当の得意先名を選択クリックすると、「得意先検索」画面を閉じて、「得意先マスタ画面」に該当データを表示する。
1 2 3 4 5 |
Private Sub 得意先名_Click() Call 読出ボタン_Click End Sub |
*************************************************************
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Private Sub 読出ボタン_Click() On Error GoTo Err_読出ボタン_Click If IsLoaded("F_得意先フォーム") Then Call Form_F_得意先フォーム.Find_Record(Me!得意先ID) End If DoCmd.Close acForm, "F_得意先読出フォーム" Exit Sub Err_読出ボタン_Click: End Sub |
*************************************************************
(1)解説
得意先名をクリックされたとき、関数 Find_Recordに得意先IDをセットして渡す。
すると、「得意先マスタ」画面に該当データが表示されます。
検索画面を閉じて終了します。
(2)解説
「得意先マスタ」画面のイベントプロシージア内に埋め込む
「得意先マスタ」画面に埋め込む、自作関数コード
——————————————————–
1 2 3 4 5 6 7 |
Public Sub Find_Record(i As Long) If Nz(i) = 0 Then Exit Sub Me.SetFocus Me!得意先ID.SetFocus DoCmd.FindRecord i, acAnywhere, False, acDown, False, , True End Sub |
———————————-
データのエントリー画面処理には、なくてはならない処理ですね。
このパターンを覚えると、色々な場所で役に立つと思いますので、トライしてみてください。
■AccessのVBAを習得するには、上記の参考書がお勧めです。
—Accessデータベース作成講座 関連記事—
・第1回 マイクロソフト ACCESSでデータベースを作成するには
・第3回 Accessで、「得意先マスター保守」処理画面を作成してみる。
・第4回 マイクロソフト ACCESS(アクセス)でデータベースを作成 検索・抽出処理
・第5回 Access2010でパスワード管理データベースを作成してみよう。
・第6回 EXCELで作成した住所録をAccess2010に取り込んではがき宛名印刷をしてみる。
・第7回 郵便局の郵便番号簿データをダウンロードして、郵便番号・住所検索用のアプリをAccessで作成してみる。
・第8回 マイクロソフト ACCESSでデータベースを作成する時のプログラムソースのコーディングについて
—Accessについて 関連記事—
・Access 2013 の新機能とAccess 2013 で廃止、変更された機能とバージョンアップの必要性について
・マイクロソフト、「Access」の便利な機能を使って、業務アプリケーションを作成して活用する。
・第1回 ACCESS(アクセス)データベース作成ソフトについて
・第2回 ACCESS(アクセス)データベース作成ソフトについて
・第3回 ACCESS 2007の情報
・第4回 ACCESS トラブル対処の情報1「mdbが壊れてしまった時」
・第5回 ACCESSを「ファイル共有」で使用する場合の注意事項
・第6回 ACCESS トラブル対処の情報2 「メモリ不足」エラーについて
・第7回 ACCESSで Jet 4.0 データベースの動作環境を最適に保つ方法
・第8回 Access 2000とMSDEを利用してクライアント/サーバーシステムを構築する
・第9回 ACCESS 2010の情報
・第10回 Access2000(mdb)からAccess2010(accdb)に変換する
Sponsored Links