発注書を電子メールで送信するお手本データベース

図6-6-1 発注書を電子メールで送信するサンプルデータベース
このサンプルデータベースは、Accessのフォームから入力した発注書を電子メールで送信します。発注書入力フォームから、新規登録のボタンをクリックして、発注先、発注者、発注日、納品日(予定日)、そして発注明細(商品名、単価、数量、金額)を入力します。発注書を入力したら、メール送信ボタンをクリックして送信します。メールの宛先は、送信ボタンの下に表示されています。送信ボタンをクリックすると、発注書がスナップショットファイル形式で保存されて、Outlookのメールに添付されます。図6-6-2のOutlookから送信ボタンをクリックすると、送信トレイに登録されます。送信トレイに登録されたメールは、Outlookから送信、または送受信ボタンをクリックしたときに送信されます。受信者は、メールに添付されている発注書をダブルクリックすると、Snapshot Viewerが起動されて、発注書が表示されます。Snapshot Viewerからは、発注書を印刷することもできます。Snapshot Viewerは、マイクロソフト社のホームページから無償でダウンロードすることができますので、発注先はAccess を購入する必要はありません。

図6-6-2 発注書がメールに添付された例

図6-6-3 メールに添付されている発注書をSnapshot Viewerで表示させた例
サンプルデータベース(CH6-6.mdb)では、以下に示すノウハウを習得することができます。
◆ Accessのフォームから入力した発注書を電子メールで発注先に送信する方法
◆ フォームに登録、保存、印刷、復元などのコマンドボタンを作成する方法
● サンプルデータベースで使用するテーブル/クエリ/レポートを準備するには
1 Accessを起動したら作業フォルダに、新規データベースCH6-6.mdbを作成します。
2 ファイルメニューから外部データの取り込み、インポートをクリックします。インポートのダイアログが表示されたら、Northwind.mdb(デフォルトで、”C:\Program Files\Microsoft Office\Office\Samples”にインストールされます。)を選択してインポートボタンをクリックします。オブジェクトのインポートダイアログが表示されたら、テーブルのタブをクリックして、仕入先、社員、商品テーブルを選択します。OKボタンをクリックして、インポートを完了させます。
3 データベースウィンドウのテーブル
をクリックしたら、仕入先テーブルをデザインモードで開いて、表6-6-1のように修正します。ファイルメニューから名前を付けて保存をクリックして“tbl仕入先”の名称で保存します。同様の手順で、社員、商品テーブルを修正したら、“tbl社員”、“tbl商品”の名称で保存します。
表6-6-1 tbl仕入先テーブルの構造
|
テーブル名 |
説 明 |
作成日 |
最終更新日 |
||
|
tbl仕入先 |
仕入先マスタ |
|
|
||
|
No |
フィールド名 |
データ型 |
サイズ |
説 明 |
|
|
1 |
仕入先ID |
長整数型 |
4 |
主キー設定 |
|
|
2 |
仕入先フリガナ |
テキスト型 |
50 |
|
|
|
3 |
仕入先名 |
テキスト型 |
40 |
|
|
|
4 |
担当者名 |
テキスト型 |
30 |
|
|
|
5 |
郵便番号 |
テキスト型 |
10 |
|
|
|
6 |
住所1 |
テキスト型 |
60 |
|
|
|
7 |
住所2 |
テキスト型 |
60 |
|
|
|
8 |
電話番号 |
テキスト型 |
24 |
|
|
|
9 |
FAX番号 |
テキスト型 |
24 |
|
|
|
10 |
メールアドレス |
テキスト型 |
50 |
|
|
|
11 |
最終発注番号 |
長整数型 |
4 |
|
|
表6-6-2 tbl社員テーブルの構造
|
テーブル名 |
説 明 |
作成日 |
最終更新日 |
||
|
tbl社員 |
社員マスタ |
|
|
||
|
No |
フィールド名 |
データ型 |
サイズ |
説 明 |
|
|
1 |
社員ID |
長整数型 |
4 |
主キー設定 |
|
|
2 |
氏名フリガナ |
テキスト型 |
50 |
|
|
|
3 |
氏名 |
テキスト型 |
40 |
|
|
表6-6-3 tbl商品テーブルの構造
|
テーブル名 |
説 明 |
作成日 |
最終更新日 |
||
|
tbl商品 |
商品マスタ |
|
|
||
|
No |
フィールド名 |
データ型 |
サイズ |
説 明 |
|
|
1 |
商品ID |
長整数型 |
4 |
主キー設定 |
|
|
2 |
商品フリガナ |
テキスト型 |
50 |
|
|
|
3 |
商品名 |
テキスト型 |
40 |
|
|
|
4 |
仕入先ID |
長整数型 |
4 |
|
|
|
5 |
単価 |
通貨型 |
8 |
|
|
|
6 |
単価入力日 |
日付/時刻型 |
8 |
|
|
4 データベースウィンドウからテーブルの新規作成ボタンをクリックして、表3-6-4、表3-6-5のtbl受注テーブルとtbl受注明細テーブルを入力して保存します。
表6-6-4 tbl受注テーブルの構造
|
テーブル名 |
説 明 |
作成日 |
最終更新日 |
||
|
tbl発注 |
発注ヘッダー |
|
|
||
|
No |
フィールド名 |
データ型 |
サイズ |
説 明 |
|
|
1 |
発注ID |
長整数型 |
4 |
主キー設定 |
|
|
2 |
仕入先ID |
長整数型 |
4 |
|
|
|
3 |
社員ID |
長整数型 |
4 |
|
|
|
4 |
発注日 |
日付/時刻型 |
8 |
|
|
|
5 |
納品日 |
日付/時刻型 |
8 |
|
|
表6-6-5 tbl受注明細テーブルの構造
|
テーブル名 |
説 明 |
作成日 |
最終更新日 |
||
|
tbl発注明細 |
発注明細 |
|
|
||
|
No |
フィールド名 |
データ型 |
サイズ |
説 明 |
|
|
1 |
発注ID |
長整数型 |
4 |
主キー設定 |
|
|
2 |
行番号 |
オートナンバー型 |
4 |
主キー設定 |
|
|
3 |
商品ID |
長整数型 |
4 |
|
|
|
4 |
単価 |
通貨型 |
8 |
|
|
|
5 |
単価入力日 |
日付/時刻型 |
8 |
|
|
|
6 |
数量 |
整数型 |
2 |
|
|
5 データベースウィンドウからクエリ
をクリックしたら、一覧からデザインビューでクエリを作成するをダブルクリックします。テーブルの表示ダイアログが表示されたら、閉じるのボタンをクリックします。メニューからSQLのアイコン
をクリックして、SQLのウィンドウを表示させたら、リスト6-6-1のSQLを入力します。(SQLを手入力する代わりに、CH6-6.mdbのクエリqry10受注をインポートしてもよい。)SQLを入力したら、デザインビューに切り替えて、図3-6-4のようになっているか確認して、qry10受注の名称で保存します。同様の手順で、qry10発注明細とqry20発注書印刷を作成します。
リスト6-6-1 qry10受注のSQL
|
SELECT tbl発注.*, tbl仕入先.担当者名, tbl仕入先.メールアドレス FROM tbl発注 INNER JOIN tbl仕入先 ON tbl発注.仕入先ID = tbl仕入先.仕入先ID ORDER BY tbl発注.発注ID; |
リスト6-6-2 qry10発注明細のSQL
|
SELECT tbl発注明細.発注ID, tbl発注明細.行番号, tbl発注明細.商品ID, tbl発注明細.単価, tbl発注明細.単価入力日, tbl発注明細.数量, CCur([単価]*[数量]) AS 金額 FROM tbl発注明細 ORDER BY tbl発注明細.発注ID, tbl発注明細.行番号; |
リスト6-6-3 qry20発注書印刷のSQL
|
SELECT tbl発注.発注ID, tbl発注.仕入先ID, tbl仕入先.仕入先名, tbl仕入先.担当者名, tbl仕入先.郵便番号, tbl仕入先.住所1, tbl仕入先.住所2, tbl仕入先.電話番号, tbl仕入先.FAX番号, tbl社員.氏名, tbl発注.発注日, tbl発注.納品日, tbl発注明細.行番号, tbl発注明細.商品ID, tbl商品.商品名, tbl発注明細.単価, tbl発注明細.数量, CCur([tbl発注明細]![単価]*[tbl発注明細]![数量]) AS 金額 FROM tbl商品 INNER JOIN ((tbl社員 INNER JOIN (tbl仕入先 INNER JOIN tbl発注 ON tbl仕入先.仕入先ID = tbl発注.仕入先ID) ON tbl社員.社員ID = tbl発注.社員ID) INNER JOIN tbl発注明細 ON tbl発注.発注ID = tbl発注明細.発注ID) ON tbl商品.商品ID = tbl発注明細.商品ID; |

図6-6-4 qry10受注のデザインビュー
6 ファイルメニューから外部データの取り込み、インポートをクリックします。インポートのダイアログが表示されたら、 CH6-6.mdbを選択します。レポートのタブをクリックしてrptPurchaseOrdersを選択したら、OKボタンをクリックしてインポートを完了させます。
7 テーブル、クエリ、レポートの準備ができたら、Access を終了させます。
● 発注書を入力してメール送信するフォームを作成するには
1 Access を起動したら、作業フォルダに作成した CH6-6.mdbを開きます。
2 データベースウィンドウが表示されたら、CH6-6.mdbを開いて、モジュールbasMyLibをコピーします。(CH6-6.mdbのデータベースウィンドウからbasMyLibをドラッグして、作業フォルダのCH6-6.mdbのデータベースウィンドウに貼り付けると自動的にコピーされます。)basMyLibをコピーしたら、デザインモードで開きます。VBEのツールメニューから参照設定をクリックして、参照可能なライブラリファイルからMicrosoft DAO 3.6 Object Libraryを選択して、OKボタンをクリックします。モジュールウィンドウを閉して、Accessに切り替えます。
3 データベースウィンドウからフォーム
をクリックしたら、新規作成ボタンをクリックします。フォームの新規作成ダイアログが表示されたら、リストボックスからデザインビューを選択します。基になるテーブル/クエリのコンボボックスからは、qry10発注を選択してOKボタンをクリックします。フォームのデザインビューが表示されたら、メニューからフィールドリストのアイコン
をクリックして、フィールドの一覧を表示させます。一覧から、発注ID、仕入先ID、担当者名、社員ID、発注日、納品日、メールアドレスをドラッグしてフォーム詳細に配置します。仕入先IDのテキストボックスを選択したら、マウスの右ボタンをクリックしてショートカットメニューを表示させます。メニューからコントロールの種類の変更èコンボボックスをクリックしてコンボボックスに切り替えます。同様の手順で、社員IDのテキストボックスをコンボボックスに切り替えます。フォームに配置したコントロールのプロパティは、表6-6-6のように設定します。発注先、発注者、発注日、納品日などの必須項目のコントロールのタグプロパティには、未入力時のエラーメッセージを格納しておきます。
4 メニューからツールボックスのアイコン
をクリックして、ツールボックスを表示させます。ツールボックスから、コマンドボタンのアイコン
をクリックしたら、フォーム詳細に、7個(右から順番に閉じる、保存、追加、印刷、削除、復元、メール送信)のコマンドボタンを作成します。コマンドボタンのプロパティは、表3-6-6のように設定します。
表6-6-6 フォーム詳細に配置したコントロールのプロパティ
|
コントロールの種類 |
プロパティ |
値 |
|
テキストボックス1 |
名前 |
発注ID |
|
編集ロック |
はい |
|
|
背景色 |
16777088 |
|
|
コンボボックス1 |
名前 |
cbo発注先 |
|
値集合ソース |
SELECT tbl仕入先.仕入先ID, tbl仕入先.仕入先名 FROM tbl仕入先 ORDER BY tbl仕入先.仕入先ID, tbl仕入先.仕入先フリガナ; |
|
|
連結列 |
1 |
|
|
列数 |
2 |
|
|
列幅 |
0cm;4.3cm |
|
|
タグ |
発注先を選択してください! (未入力時のエラーメッセージ) |
|
|
コンボボックス2 |
名前 |
cbo発注者 |
|
値集合ソース |
SELECT tbl社員.社員ID, tbl社員.氏名 FROM tbl社員 ORDER BY tbl社員.氏名, tbl社員.氏名フリガナ; |
|
|
連結列 |
1 |
|
|
列数 |
2 |
|
|
列幅 |
0cm;2.5cm |
|
|
タグ |
発注者を選択してください! (未入力時のエラーメッセージ) |
|
|
テキストボックス2 |
名前 |
発注日 |
|
タグ |
発注日を入力してください! (未入力時のエラーメッセージ) |
|
|
テキストボックス3 |
名前 |
納品日 |
|
タグ |
納品日を入力してください! (未入力時のエラーメッセージ) |
|
|
テキストボックス4 |
名前 |
担当者名 |
|
テキストボックス4 |
名前 |
メールアドレス |
|
編集ロック |
はい |
|
|
背景色 |
12910591 |
|
|
コマンドボタン1 |
名前 |
cmdClose |
|
クリック時 |
=CloseForm_FS([Form]) ※ |
|
|
コマンドボタン2 |
名前 |
cmdSave |
|
クリック時 |
=CloseForm_FS([Form]) ※ |
|
|
コマンドボタン3 |
名前 |
cmdAdd |
|
クリック時 |
イベントプロシージャ |
|
|
コマンドボタン4 |
名前 |
cmdPrint |
|
クリック時 |
イベントプロシージャ |
|
|
コマンドボタン5 |
名前 |
cmdDelete |
|
クリック時 |
=Delete_FS([Form]) ※ |
|
|
コマンドボタン6 |
名前 |
cmdUnDo |
|
クリック時 |
=UnDo_FS([Form]) ※ |
|
|
コマンドボタン7 |
名前 |
cmdSubmit |
|
クリック時 |
イベントプロシージャ |
※:これらの関数は、モジュールbasMyLibに登録されています。

図6-6-5 フォーム詳細に、発注書ヘッダーとコマンドボタンを作成した例
5 メニューからコードのアイコン
をクリックして、フォームモジュールを表示させます。CH6-6.mdbを開いて、frmPurchaseOrderのフォームモジュールをコピーして貼り付けます。フォームモジュールのソースコードは、リスト6-6-4を参照してください。フォームをfrmPurchaseOrderの名称で保存して閉じます。
6 フォームから新規作成のコマンドボタンをクリックして、フォームの新規作成ダイアログを表示させます。リストボックスからは、デザインビューを選択します。基になるテーブル/クエリのコンボボックスから、qry10発注明細を選択したら、OKボタンをクリックします。フォームのデザインビューが表示されたら、メニューからフィールドリストのアイコン
をクリックして、フィールドの一覧を表示させます。一覧から、商品ID、単価、単価入力日、数量、金額をドラッグして、フォーム詳細に配置します。テキストボックスのラベルを選択したら、切り取ってフォームヘッダーに貼り付けます。フォームに作成したラベル、テキストボックスを図6-6-6のように配置します。商品IDのテキストボックスを選択したら、マウスの右ボタンをクリックして、ショートカットメニューを表示させます。メニューから、コントロールの種類を変更èコンボボックスをクリックしてコンボボックスに切り替えます。ツールボックスを表示させたら、コマンドボタンのアイコン
をクリックして、金額のテキストボックスの右に配置します。数量と金額のテキストボックスを選択したら、マウスの右ボタンをクリックしてショートカットメニューを表示させてコピーして、フォームフッターに配置します。フォームに作成したコントロールのプロパティを表6-6-7のように設定します。
表6-6-7 フォームに作成したコントロールのプロパティ
|
コントロールの種類 |
プロパティ |
値 |
|
コンボボックス |
名前 |
cbo商品 |
|
値集合ソース |
SELECT tbl商品.商品ID, tbl商品.商品名, tbl商品.単価, tbl商品.単価入力日 FROM tbl商品 WHERE (((tbl商品.仕入先ID)= [Forms]![frmPurchaseOrder]![cbo発注先])) ORDER BY tbl商品.商品フリガナ; |
|
|
連結列 |
1 |
|
|
列数 |
4 |
|
|
列幅 |
0cm;4.5cm;0cm;0cm |
|
|
テキストボックス1 |
名前 |
単価 |
|
テキストボックス2 |
名前 |
単価入力日 |
|
テキストボックス3 |
名前 |
数量 |
|
テキストボックス4 |
名前 |
金額 |
|
コマンドボタン |
名前 |
cmdDelete |
|
クリック時 |
=Delete_FS([Form]) ※ |
|
|
テキストボックス5 |
名前 |
txt合計数量 |
|
コントロールソース |
=Sum([数量]) |
|
|
編集ロック |
はい |
|
|
背景色 |
16777088 |
|
|
テキストボックス6 |
名前 |
txt合計金額 |
|
コントロールソース |
=Sum([金額]) |
|
|
編集ロック |
はい |
|
|
書式 |
通貨 |
|
|
背景色 |
16777088 |
※:この関数は、モジュールbasMyLibに登録されています。

図6-6-6 発注明細フォームに作成したコントロールのレイアウト
7 メニューからコードのアイコン
をクリックしたら、フォームモジュールを表示させます。CH6-6.mdbを開いたら、sfrPurchaseOrderDetailsのフォームモジュールをコピーして貼り付けます。フォームモジュールのソースコードは、リスト6-6-5を参照してください。フォームをsfrPurchaseOrderDetailsの名称で保存して閉じます。
8 メインフォームfrmPurchaseOrderをデザインモードで開いたら、データベースウィンドウからサブフォームsfrPurchaseOrderDetailsをドラッグして貼り付けます。メインフォームをビューモードで開いたら、発注書の新規入力ボタンをクリックしてテスト用のデータを入力します。保存ボタンをクリックして発注書を保存したら、メール送信ボタンをクリックして発注書を送信します。

図6-6-7 メインフォーム発注書にサブフォーム発注書明細を貼り付けた例
9 Outlookが起動されて、発注書がメールに添付されていますので、Outlook から送信ボタンをクリックして、送信トレイに登録します。送信トレイに登録されたメールは、Outlook から送信ボタンまたは、送受信ボタンをクリックしたときに送信されます。メール受信者は、添付ファイルをダブルクリックすると、Snapshot Viewerが起動されて発注書が表示されます。

図6-6-8 発注書がメールに添付された例
10 メインフォームを保存したら、Access を終了します。
Form_Open()イベントの処理
このイベントは、フォームが開かれたときに発生します。このイベントでは、発注先のコンボボックスにフォーカスを移動します。
Form_Current()イベントの処理
このイベントは、フォームに表示されているレコードが移動するときに発生します。このイベントでは、サブフォーム発注明細の商品コンボボックスを再クエリして、発注先の商品のみ表示されるようにします。
Form_BeforeUpdate()イベントの処理
このイベントは、フォーム上のレコードが更新されたときに発生します。このイベントでは、フォーム上の必須項目(タグプロパティにエラーメッセージが設定されているコントロール)に値が入力されているか調べて未入力のとき、エラーメッセージを表示してフォーカスを移動します。
For Each ctl In
Me.Section(acDetail).Controls
With ctl
If .ControlType =
acTextBox Or .ControlType = acComboBox Then
If
Len(Nz(.Tag, "")) <> 0 Then
If IsNull(.Value) Or IsEmpty(.Value) Then
MsgBox .Tag, vbExclamation
.SetFocus
Cancel = True
Exit Sub
End If
End If
End If
End With
Next ctl
必須項目が全て入力されているときは、tbl仕入先テーブルを読み込んで発注番号を自動採番します。発注番号は、仕入先別に連番になるように採番します。tbl仕入先の最終発注番号を更新中に排他制御エラーが発生したときは、規定回数(5回)分再試行します。尚、再試行するときは、DoEventsをループさせて一定時間待ちます。
intRetryCount =
intRetryCount + 1
If intRetryCount <=
conLockRetries Then
DAO.DBEngine.Idle
lngWait = intRetryCount ^ 2 * _
Int((conLockUBound - conLockLBound + 1) * Rnd() + conLockLBound)
For
lngW = 1 To lngWait
DoEvents
Next
lngW
Resume
Else
MsgBox "排他制御エラーのためレコードの更新ができませんでした!", _
vbCritical + vbOKOnly
Cancel = True
Resume ExitErr
End If
cbo発注先_AfterUpdate()イベントの処理
このイベントは、発注先のコンボボックスから発注先を選択したときに発生します。このイベントでは、サブフォーム発注明細の商品コンボボックスを再クエリして、発注先の商品のみ表示されるようします。
cmdSubmit_Click()イベントの処理
このイベントは、フォームからメール送信のボタンをクリックしたときに発生します。このイベントでは、DoCmdのSendObjectメソッドで発注書のレポートをスナップショットファイル形式で保存してメール送信します。引数の宛先(To)には、tbl仕入先テーブルのメールアドレスが設定されます。
DoCmd.SendObject ObjectType:=acSendReport,
_
ObjectName:=conReportName, _
OutputFormat:=acFormatSNP, _
To:=Me.メールアドレス, _
Subject:="Purchase Orders", _
MessageText:="Here is the
Purchase Orders as of April 1, 2000"
cmdAdd_Click()イベントの処理
このイベントは、フォームから発注書の新規入力ボタンをクリックしたときに発生します。このイベントでは、Add_FS()関数を呼び出して新規レコードを追加して、フォーカスを発注先のコンボボックスに移動します。Add_FS()は、basMyLibに登録されていますので詳細はそちらを参照してください。
cmdPrint_Click()イベントの処理
このイベントは、フォームから発注書の印刷ボタンをクリックしたときに発生します。このイベントでは、DoCmdのOpenReportメソッドで発注書のレポートをプレビュー印刷します。
SetFilter()の処理(フォームに新規登録したメソッド)
このメソッドは、引数で指定されたレポートのFilterプロパティにWhere条件を設定してレコードを絞込みます。このメソッドを使用するには、レポートのOnOpenイベントで、以下の記述します。IsLoaded()関数は、frmPurchaseOrderがロードされているか調べます。
Private Sub Report_Open(Cancel As Integer)
If
IsLoaded("frmPurchaseOrder") Then
Forms("frmPurchaseOrder").SetFilter Me
End If
End Sub
リスト6-6-4 frmPurchaseOrderのフォームモジュール
|
Option Compare Database Option Explicit Private Const conReportName = "rptPurchaseOrders" Private Sub cbo発注先_AfterUpdate() Me.sfr発注明細.Form.cbo商品.Requery End Sub Private Sub cmdAdd_Click() Call Add_FS(Me) Me.cbo発注先.SetFocus End Sub Private Sub cmdSubmit_Click() On Error Resume Next DoCmd.SendObject ObjectType:=acSendReport, _ ObjectName:=conReportName, _ OutputFormat:=acFormatSNP, _ To:=Me.メールアドレス, _ Subject:="Purchase Orders", _ MessageText:="Here is the Purchase Orders as of April 1, 2000" End Sub Private Sub Form_BeforeUpdate(Cancel As Integer) Dim db As DAO.Database Dim rs As DAO.Recordset Dim lngSeqNo As Long Dim ctl As Control
Dim lngW As Long Dim lngWait As Long Dim intRetryCount As Integer Const conLockRetries = 5 Const conLockLBound = 2 Const conLockUBound = 10
For Each ctl In Me.Section(acDetail).Controls With ctl If .ControlType = acTextBox Or .ControlType = acComboBox Then If Len(Nz(.Tag, "")) <> 0 Then If IsNull(.Value) Or IsEmpty(.Value) Then MsgBox .Tag, vbExclamation .SetFocus Cancel = True Exit Sub End If End If End If End With Next ctl
If Nz(Me.発注ID, 0) <> 0 Then Exit Sub End If
Set db = CurrentDb Set rs = db.OpenRecordset("tbl仕入先", dbOpenDynaset) With rs .FindFirst "仕入先ID=" & Me.cbo発注先 If Not .NoMatch Then .LockEdits = True On Error GoTo ExclErr .Edit !最終発注番号 = !最終発注番号 + 1 lngSeqNo = !最終発注番号 .Update Else lngSeqNo = 0 End If End With Me.発注ID = Me.cbo発注先 * 10000 + lngSeqNo ExitErr: On Error Resume Next rs.Close Set rs = Nothing Set db = Nothing Exit Sub
ExclErr: Select Case Err.Number Case 3186, 3202, 3187, 3189, 3197, 3188, 3260, 3218 intRetryCount = intRetryCount + 1 If intRetryCount <= conLockRetries Then DAO.DBEngine.Idle lngWait = intRetryCount ^ 2 * _ Int((conLockUBound - conLockLBound + 1) * Rnd() + conLockLBound) For lngW = 1 To lngWait DoEvents Next lngW Resume Else MsgBox "排他制御エラーのためレコードの更新ができませんでした!", _ vbCritical + vbOKOnly Cancel = True Resume ExitErr End If Case Else MsgBox "Error #" & Err.numer & ":" & _ Err.Description, vbCritical + vbOKOnly Resume ExitErr End Select End Sub Private Sub Form_Current() Me.sfr発注明細.Form.cbo商品.Requery End Sub Private Sub Form_Open(Cancel As Integer) Me.cbo発注先.SetFocus End Sub Private Sub cmdPrint_Click() On Error Resume Next DoCmd.OpenReport conReportName, acViewPreview End Sub '-------------------------------------------------- ' Form specific method called by rptPurchaseOrders '-------------------------------------------------- Public Sub SetFilter(rpt As Report) With rpt .Filter = "tbl発注.発注ID=" & Me.発注ID .FilterOn = True End With End Sub |
cbo商品_GotFocus()イベントの処理
このイベントは、商品コンボボックスがフォーカスを取得したときに発生します。このイベントでは、商品コンボボックスのドロップダウンリストを表示させます。尚、コンボボックスの値集合ソースには、フィルタ条件が設定してありますのでメインフォームで選択した発注先の商品のみ表示されます。
cbo商品_AfterUpdate()イベントの処理
このイベントは、商品コンボボックスからアイテムを選択したときに発生します。このイベントでは、商品コンボボックスのカラム2、3から単価、単価入力日を取得してテキストボックスに設定します。
リスト6-6-5 sfrPurchaseOrderDetailsのフォームモジュール
|
Option Compare Database Option Explicit Private Sub cbo商品_AfterUpdate() Me.単価 = Me.cbo商品.Column(2) Me.単価入力日 = Me.cbo商品.Column(3) End Sub Private Sub cbo商品_GotFocus() Me.cbo商品.Dropdown End Sub |