レポートを定期的に電子メールで自動送信するには
データベースに登録されている全レポートを検索して、印刷条件に該当するレポートをスナップショット形式で電子メールにて自動送信する方法を解説します。
- Access 2000を起動してサンプルデータベース
Northwind.mdb を開きます。
- データベースウインドウが表示されたら、レポートのボタンをクリックして五十音順商品リストをデザインモードで開きます。
五十音順商品リストのレポートプロパティを表示させて、タグプロパティに以下の情報を設定します。尚、各項目の区切り文字としてセミコロン(;)を使用します。タグに情報を設定したらレポートを保存して閉じます。
タグに設定する内容:
| 項目 |
内容 |
| Report ID |
レポートの印刷条件を設定します。
例:Daily, Weekly, Monthly, Yearly, On Demand |
| To |
電子メールの宛先を設定します。複数の宛先を指定するときは、コンマで区切ります。
例: supervisor@friendlysw.com,ceo@friendldlysw.com |
| Subject |
電子メールの件名を設定します。 |
| Body |
電子メールの本文を設定します。 |
タグの内容:
Daily;ceo@friendlysw.com;Snapshot Report;Here is the Daily Report
 |
| 図1-レポートのタグにReportID,
To, Subject, Bodyを設定した例 |
同様の手順でその他のレポートのタグプロパティに電子メール送信情報を設定します。
新規のフォームを作成して、メール送信のコマンドボタン(cmdSendMail)を配置します。コマンドボタンのクリックイベントに、リスト1のコードをコピー&ペーストします。この例では、SendSnapShotの引数にReport
IDとしてDailyを指定していますので、全レポートのタグプロパティを検索してDailyに印刷するレポートをスナップショット形式で電子メールにて送信します。電子メールの宛先、用件、本文は、レポート毎に設定することができます。複数の宛先を指定するときは、コンマ(、)で区切ります。
| リスト1-メール送信用コマンドボタンのクリックイベント処理 |
Private Sub cmdSendMail_Click()
SendSnapShot "Daily"
End Sub
Sub SendSnapShot(strReportID As String)
Dim obj As AccessObject
Dim rpt As Report
Dim varTag As Variant ' ID(0),To(1),Subject(2),Body(3)
Dim intI As Integer
Const conID = 0
Const conTo = 1
Const conSubject = 2
Const conBody = 3
On Error Resume Next
For Each obj In CurrentProject.AllReports
DoCmd.OpenReport obj.Name, acViewDesign
Set rpt = Reports(obj.Name)
With rpt
varTag = Split(Nz(.Tag), ";") ' 0-based array
If UBound(varTag) > 1 Then
If LCase(varTag(conID)) = LCase(strReportID) Then
DoCmd.OpenReport obj.Name, acViewPreview
DoCmd.SendObject acSendReport, obj.Name, _
acFormatSNP, Replace(varTag(conTo), ",", ";"), , , _
varTag(conSubject), varTag(conBody), False
End If
End If
End With
DoCmd.Close acReport, obj.Name, acSaveNo
Next obj
End Sub
|
フォームをビューモードに切り替えたら、メール送信のコマンドボタンをクリックします。Outlook
2000を起動して送信トレイにメールが送信されていることを確認してから、送受信のアイコンをクリックして送信します。
フォームを保存してAccess 2000を終了します。
|