三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
Ken3三流君の連絡先:
[google formsで連絡する]
上記の問い合わせフォームに質問・感想など気軽に書き込んでください

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

QA110218 ウ.AccessサブフォームのデータをOutlookのメール本文に転記する

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 を見てください。


質問・感想・クレームなど、
気軽にコメント欄に書いてもらえるとうれしいです。

[Googleフォームにコメントを残す]
↑質問・コメントの入力フォームです、気軽に書いてください


フッター:最後にKen3Videoの動画一覧を紹介します

YouTubeにアップした動画です。他の動画を一瞬でも見てもらえるとさらに嬉しいです。
再生リスト:[三流君Ken3の最新動画]←リストの一覧形式で表示する


また、ブログを見に来てくださいね。ではまたぁ~