AccessからOutlookを起動して、
メールの本文にフォーム(サブフォーム)の内容を転記します。
例題がドラマタイトルと出演者なのでわかりにくいですが、
よくある
台帳と明細
1対nのリンクされたテーブル
メインフォーム と サブフォームのデータ取り出し
に応用してみてください。
動画解説
蛇足や回り道、途中予定外のエラーで解説者本人固まったりしてますが、
下記、作成の流れ と 駆け足解説です。
http://www.youtube.com/watch?v=xI7Pnx66RRw
www.youtube.com
処理内容
1. Outlookの起動とメールアイテムの作成
手前味噌の
http://www.ken3.org/cgi-bin/group/vba_outlook.asp#MailItem
を参考にコピーしながら作成する
2.メールアイテムにサブフォームの内容をセットする
前回の QA110218 イ.Access メインフォーム、サブフォーム、値の取り出し方?
http://d.hatena.ne.jp/ken3memo/20110218/1297976772
を参考に作成する。
作成したソースコード
ほとんど、コピー貼りつけですが、こんな感じで、
Accessサブフォームからデータを抜き出し、
Outlookのメールにセットしてみました。
Private Sub B_MAIL_Click() Dim oApp As Object Dim myNameSpace As Object Dim myFolder As Object Dim objMAIL As Object 'メールのオブジェクト Dim strMOJI As String '本文 Dim n As Integer 'カウンター 'outlook 起動 Set oApp = CreateObject("Outlook.Application") Set myNameSpace = oApp.GetNamespace("MAPI") Set myFolder = myNameSpace.GetDefaultFolder(6) '規定のフォルダーを指定 myFolder.Display '表示 いつものクセで .Visible = True とやりがちだけど 'メールアイテムの作成 Set objMAIL = oApp.CreateItem(0) 'olMailItem=0 直値はいけないと思いつつ、 objMAIL.Display '画面表示(Mail入力、編集画面を表示) '宛先・件名・本文 などのデータを代入する objMAIL.To = "test@ken3.org" '宛先 ほかに.cc や.Bccも可能です objMAIL.CC = "vba@ken3.org ; oltest@ken3.org" '宛先 .cc 'objMAIL.BCC = "vba@ken3.org ; oltest@ken3.org" '宛先を複数は ; セミコロンで区切る objMAIL.Subject = "ドラマ " & Me.ドラマタイトル & " の資料を送ります " '.Subjectに文字列設定で件名 '本文を作る、(vbCrLfで改行されます) strMOJI = "こんにちは ドラマの出演者を送ります。" & vbCrLf & vbCrLf 'サブフォームの内容を転記する 'サブフォーム の レコードを移動させたいのでフォーカスサブに当てる Me![SUB出演者].SetFocus 'フォーカスのカーソル移動 DoCmd.GoToRecord , , acFirst 'サブの先頭レコードにする strMOJI = strMOJI & Me.ドラマタイトル & vbCrLf & vbCrLf strMOJI = strMOJI & "出演者 役名" & vbCrLf strMOJI = strMOJI & "-------------------------------" & vbCrLf For n = 1 To Me![SUB出演者].Form.Recordset.RecordCount strMOJI = strMOJI & Me![SUB出演者]![出演者] & " / " & Me![SUB出演者]![役名] & vbCrLf DoCmd.GoToRecord , , acNext '次のレコードへ Next DoCmd.GoToRecord , , acFirst '再度頭にサブの先頭レコードにする '作成結果を本文に代入 strMOJI = strMOJI & "-------------------------------" & vbCrLf strMOJI = strMOJI & "以上、よろしくお願いします。 三流君より" & vbCrLf objMAIL.Body = strMOJI '本文の代入 objMAIL.Display '編集画面のまま止めておきたい時 や テスト中に動作を見たいとき 'ここで、普通はオブジェクトの開放など、後始末をする。 End Sub
終わりの挨拶
アクセス サブフォームのデータ抜き出しは、
ADOやDAOがガッコいいんだけど、
フォーカスをセットして、DoCmdでレコード移動、
こんなセコイ方法もあるので、使ってみてください。
何かの参考となれば幸いです。 三流プログラマー Ken3
※処理の全体像 と 開発の流れは http://ken3hitori.g.hatena.ne.jp/bbs/19?from=1 を見てください。