レポートをプレビュー印刷で確認しながら並べ替えして電子メールで送信するお手本

図5-4-1 レポートを売上高の降順に並べ替えした例
このサンプルデータベースは、得意先別売上高のレポートをプレビュー印刷で確認しながら、得意先名、都道府県名、売上高の項目で並べ替えすることができます。売上高は、昇順/降順どちらでも並べ替え可能です。サンプルデータベースを起動すると、自動的にポップアップフォームが開かれます。ポップアップフォームが開かれると、フォームのOnLoadイベントで得意先別売上高のレポートをプレビューモードで開きます。得意先別売上高のプレビュー印刷が表示されている状態で、ポップアップフォームから得意先名、都道府県名、売上高をクリックすると、選択した項目を昇順に並べ替えします。ポップアップフォームから降順のチェックをクリックすると、降順に並べ替えします。
ポップアップフォームからメール送信ボタンをクリックすると、レポートをスナップショット形式で保存して電子メールのOutlookに添付して送信することができます。電子メールの宛先、用件、メッセージの内容は、引数で指定することができます。

図5-4-2 送信ボタンをクリックしたときレポートがOutlookに添付された例
サンプルデータベース(CH5-4.mdb)では、以下のノウハウを習得することができます。
◆ レポートをプレビュー印刷しながらダイナミックに特定の項目で並べ替えする方法
◆ 並べ替えしたレポートを電子メールの添付ファイルとして送信する方法
◆ テーブル、クエリ、フォーム、レポートを電子メールで送信する方法
◆ レポートを定期的に電子メールで送信する方法
● サンプルデータベースで使用するテーブル/クエリを準備するには
1 Access を起動したら作業フォルダに、新規データベースCH5-3.mdbを作成します。
2 メニューから外部データの取り込み、テーブルのリンクをクリックします。リンクのダイアログが表示されたら、Access のサンプルデータベース Northwind.mdbを選択してリンクボタンをクリックします。(Northwind.mdbは、デフォルトでは”C:\Program Files\Microsoft Office\Office\Samples”にインストールされます。)
3 テーブルのリンクのダイアログが表示されたら、すべて選択のボタンをクリックします。最後にOKボタンをクリックしてリンクを完了させます。
4 テーブルをリンクしたらデータベースウィンドウにNorthwind.mdbの全てのテーブルが表示されているか確認します。
5 データベースウィンドウからクエリ
をクリックして、一覧からデザインビューでクエリを作成するをダブルクリックします。テーブルの表示ダイアログが表示されたら、閉じるのボタンをクリックします。メニューからSQLのアイコン
をクリックして、SQLビューを表示させます。SQLビューには、SELECT;が表示されていますので、削除してからリスト5-4-1のqrySalesbyCustomersのSQLを入力します。(SQLを入力する代わりに、CH2-4.mdbからqrySalesbyCustomersをインポートすることもできます。)売上高のフィールドには、Sum(CCur([受注明細].[単価]*[受注明細].[数量]*(1-[受注明細].[割引])))が埋め込まれています。クエリをデザインビューに切り替えると図5-4-3のように表示されます。クエリをqrySalesbyCustomersの名称で保存して閉じます。
リスト5-4-1 qrySalesbyCustomersのSQL
|
SELECT 得意先.得意先名, 得意先.フリガナ, 得意先.都道府県, Sum(CCur([受注明細].[単価]*[受注明細].[数量]*(1-[受注明細].[割引]))) AS 売上高 FROM 得意先 INNER JOIN (受注 INNER JOIN 受注明細 ON 受注.受注コード = 受注明細.受注コード) ON 得意先.得意先コード = 受注.得意先コード GROUP BY 得意先.得意先名, 得意先.フリガナ, 得意先.都道府県; |

図5-4-3 qrySalesbyCustomerのデザインビュー
同様の手順で、SQLビューを表示させたら、リスト5-4-2のqrySalesbyCustomer2のSQLを入力するか、CH5-4.mdbからインポートします。クエリをデザインビューに切り替えると、図5-4-4のように表示されます。クエリをqrySalesbyCustomers2の名称で保存して閉じます。
リスト5-4-2 qrySalesbyCustomer2のSQL
|
SELECT [qrySalesbyCustomers].[得意先名], [qrySalesbyCustomers].[売上高],
[qrySalesbyCustomers].[フリガナ],
[qrySalesbyCustomers].[都道府県] FROM qrySalesbyCustomers; |

図5-4-4 qrySalesbyCustomers2のデザインビュー
6 テーブルとクエリの準備ができたら、Access を終了させます。
● 得意先別売上高を印刷するレポートを作成するには
1 Access を起動したら作業フォルダに作成したCH5-4.mdbを開きます。
2 データベースウィンドウからレポート
をクリックしたら、新規作成ボタンをクリックします。レポートの新規作成ダイアログが表示されたら、一覧からレポートウィザードを選択します。次に、基になるテーブル/クエリのコンボボックスからqrySalesbyCustomers2を選択してOKボタンをクリックします。以下、レポートウィザードの指示に従って図5-4-5のようなレポートを作成します。

図5-4-5 得意先別売上高を印刷するレポートレイアウト
3 プレビュー印刷で結果を確認したら、rptSalesbyCustomersの名称で保存してAccess を終了します。
● レポートを特定のフィールドで並べ替えてメール送信するフォームを作成するには
1 Access を起動したら作業フォルダに作成した CH5-4.mdbを開きます。
2 データベースウィンドウからフォーム
をクリックしたら、一覧からデザインビューでフォームを作成するをダブルクリックします。フォームのデザインビューが表示されたら、ツールボックス(コントロールウィザードアイコン
がクリックされているか確認してください)からオプショングループのアイコン
をクリックして、得意先名、都道府県名、売上高の3個のトグルボタンを作成します。オプショングループのプロパティを表示させたら、その他のタブをクリックして名前をfraSortに書き替えます。次に、データタブをクリックしたら既定値に2を設定します。最後に、書式タブをクリックしたら立体表示のコンボボックスから“くぼみ”をクリックします。

図5-4-6 フォームにオプショングループの並べ替え順を配置した例
3 ツールボックスからチェックボックスのアイコン
をクリックしてオプショングループの右側に配置します。チェックボックスのラベル標題には、“降順”を入力します。チェックボックスのプロパティを表示させたら、その他のタブをクリックして名前をchkDescendingに書き替えます。
4 ツールボックスからコマンドボタンのアイコン
をクリックしたら、チェックボックスの下に配置します。コマンドボタンのプロパティを表示させたら、その他のタブをクリックして名前をcmdSnapshotに書き替えます。次に、書式タブをクリックしたら標題を“メール送信”に書き替えます。
5 フォームのプロパティを表示させたら、その他のタブをクリックしてポップアップのコンボボックスから“はい”をクリックします。
6 メニューからコードのアイコン
をクリックしてフォームモジュールを表示させます。CH5-4.mdbを開いたら、frmEmailReportのフォームモジュールをコピーして貼り付けます。フォームモジュールのソースコードは、リスト5-4-1を参照してください。CH5-4.mdbを開いたら、モジュールbasLinkedTables, basMyLib, basWindowsCommonDialogをインポートします。
7 フォームをfrmEmailReportの名称で保存したら、ビューモードで開きます。フォームが開かれると、フォームのOnLoadイベントからレポートが開かれてプレビュー印刷されます。並べ替え順のオプショングループから売上高のトグルボタンをクリックして売上高の昇順に並べ替えられるか確認します。次に、降順のチェックボックスをクリックして、売上高が降順に並べ替えられるか確認します。

図5-4-7 レポートを売上高の降順に並べ替えた例
8 レポートのプレビュー印刷が表示されている状態で、ポップアップフォームからメール送信ボタンをクリックします。プレビュー印刷で表示されているレポートがスナップショット形式で保存されて、Outlookの添付ファイルとして送信されます。Outlookに表示されている、宛先、件名、本文の内容は、引数にて指定できます。Outlookから送信ボタンをクリックして、メールが正常に送信されるか確認します。尚、メール受信側でレポートを開くには、Snapshot Viewerが必要になります。Snapshot Viewerは、Access のCD-ROMからインストールすることができます。受信側のパソコンに、Accessがインストールされていないときは、マイクロソフトのWebサイトからダウンロードすることができます。

図5-4-8 レポートをスナップショット形式で保存して添付ファイルとしてOutlookで送信する例
9 レポートの並べ替え、メール送信が正常に動作することを確認したら、Access を終了させます。
Sub Form_Load()イベントの処理
このイベントは、フォームが開かれてデータをロードするときに実行されます。このイベントでは、DoCmdのOpenReportメソッドでレポート(rptSalesbyCustomers)をプレビューモードで開きます。更に、サブプロシージャSortReportを呼び出して、既定値の都道府県名でレポートを並べ替えします。
Sub Form_Unload()イベントの処理
このイベントは、フォームが閉じられる直前に実行されます。このイベントでは、DoCmdのCloseメソッドでOnLoadイベントで開いたレポート(rptSalesbyCustomers)を閉じます。
Sub fraSort_AfterUpdate()イベントの処理
このイベントは、並べ替え順のオプショングループからトグルボタンをクリックしたときに実行されます。このイベントでは、サブプロシージャ SortReportを呼び出して、選択した項目でレポートを並べ替えします。
Sub chkDescending_AfterUpdate()イベントの処理
このイベントは、降順のチェックボックスをクリックしたときに実行されます。このイベントでは、サブプロシージャ SortReportを呼び出して、既に選択したフィールド名を降順に並べ替えて再印刷します。
Sub cmdSnapshot_Click()イベントの処理
このイベントは、メール送信ボタンをクリックしたときに実行されます。このイベントでは、DoCmdのSendObjectメソッドを使用してレポートをスナップショット形式で保存してメールの添付ファイルとして送信します。SendObjectメソッドでは、テーブル、クエリ、フォーム、レポート等を、HTML、リッチテキスト、テキスト、エクセルの形式で保存して送信することができます。SendObjectの構文については、後述するTipを参照してください。
DoCmd.SendObject _
ObjectType:=acSendReport, _
ObjectName:=conReportName, _
OutputFormat:=acFormatSNP, _
To:="ceo@friendlysw.com", _
Subject:="Weekly Report", _
MessageText:="Here is the
weekly sales report"
To:=”fs1@friendlysw.com;fs2@friendlysw.com;fs3@friendlysw.com”
また、電子メールの宛先TO:の他にCC:、BCC:も指定できます。
Sub SortReport()の処理
このサブプロシージャは、レポートを指定した項目で並べ替えします。Choose()関数を使用して、オプショングループで選択したフィールド名を取得して、メモリ変数strOrderByに格納します。次に、降順のチェックボックスを調べて、チェックされているときは、フィールド名の後に“DESC”を付加します。最後に、レポートのOrderBy、OrderByOnプロパティを再設定して並べ替えします。
With Reports(conReportName)
strOrderBy = Choose(fraSort, _
"[フリガナ]", "[都道府県]", "[売上高]")
If chkDescending Then
strOrderBy =
strOrderBy & " DESC"
End If
.OrderBy = strOrderBy
.OrderByOn = True
End With
リスト5-4-1 frmEmailReportのフォームモジュール
|
Option Compare Database Option Explicit Private Const conReportName = "rptSalesbyCustomers" Private Sub chkDescending_AfterUpdate() Call SortReport End Sub Private Sub cmdSnapshot_Click() On Error Resume Next DoCmd.SendObject _ ObjectType:=acSendReport, _ ObjectName:=conReportName, _ OutputFormat:=acFormatSNP, _ To:="ceo@friendlysw.com", _ Subject:="Weekly Report", _ MessageText:="Here is the weekly sales report" End Sub Private Sub Form_Load() DoCmd.OpenReport conReportName, acViewPreview Call SortReport End Sub Private Sub Form_Open(Cancel As Integer) If Not VerifyLinks_FS("Northwind.mdb", "得意先") Then MsgBox "テーブルの再リンクに失敗しました!" & vbCrLf & _ "Accessのリンクテーブルマネージャから” _ “ Northwind.mdb を再リンクしてください.", _ vbCritical + vbOKOnly End If Call SetAppTitle_FS("Email Report (C) " & Year(Date) & " by Akio Kasai") End Sub Private Sub Form_Unload(Cancel As Integer) DoCmd.Close acReport, conReportName End Sub Private Sub SortReport() On Error Resume Next Dim strOrderBy As String With Reports(conReportName) strOrderBy = Choose(fraSort, _ "[フリガナ]", "[都道府県]", "[売上高]") If chkDescending Then strOrderBy = strOrderBy & " DESC" End If .OrderBy = strOrderBy .OrderByOn = True End With End Sub Private Sub fraSort_AfterUpdate() Call SortReport End Sub |
Tips
|
DoCmdのSendObjectメソッドの構文
SendObjectメソッドでは、テーブル、クエリ、フォーム、レポートをHTML,リッチテキスト、テキスト、エクセルの形式で保存してメールに添付することができます。 引数のobjecttype,outputformatで指定可能な値。
|