三流君 ken3のmemo置き場

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

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
よく検索されるキーワード: [質問回答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 を見てください。

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。
・[Excel/Access VBA]の解説
・[ASP(Active Server Pages)]の解説。
・[元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
・[プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
三流君を踏み台にする
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



Googleを使用して検索する

読者の声:三流君の説明・解説じゃ よくわからなかったから、Googleを使って、自分で検索します。
三流君:残念です。あっ、下記にGoogleの検索窓を設置しました。
いろいろ指定して試してみてください。

Google
探す言葉:気になる単語や,オブジェクト(Document),プロパティ(.Busy)やメソッド(.Navigate)などを入れて検索してみてください。


言語を指定:見つからない時は指定無しで探す

サイト指定:人気QAサイト や 一次情報MS本家を指定する
一次情報・二次情報まとめから探る
QAサイトの質問から探る
検索実行: ←オプション確認後に検索ボタンを押してください

期間指定:情報の鮮度も大切?
検索実行: ←オプション確認後に検索ボタンを押してください


本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)