- 締切済み
ACCESSで自動でメールをおくる時に任意のアドレスに送りたい
工場にてACCESS97を使い、営業からの発注に対して納期の回答やもろもろのデータをメールにて任意のアドレスに送りたいのですが、当方VBAはまったく使えず、クエリーの使い倒しとマクロにて、結構ややこしい処理をしています。 マクロにてオブジェクトの送信で行うと、 マクロの記述内でアドレスを書きこむかあるいはブランクにしておき、送信時に送り先を入力するかしか手がないのでしょうか? 該当する営業にその人に関わるデータのみ送りたいので 営業全員におくるわけもゆかないのです。 VBを使うしか手がないのでしょうか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- popokun
- ベストアンサー率33% (1/3)
・・・。VBA出来ないとムズイもしくは、遅いかも。 VBAで書けば? 今やってるオブジェクトの送信は下記のVBAを使ってます。 DoCmd.SendObject acSendTable, "書き出しテーブル名", acFormatXLS,TO(宛先), CC, BCC, "件名", "本文" でっ問題の任意のアドレスってヤツだが一番簡単な方法で、、、 テーブル→新規作成→デザイン→フィールド名(Mail:テキスト型) (送信:Yes/NO型)を作成して適当に2~3件入力しといてくれ! テーブル保存名は、[メアドマスタ]で保存。 ※その後、サブフォームを作って開けるようにすればなお可。 フォーム→新規作成→デザイン→コマンドボタン追加 →コマンド右クリック→プロパティ→クリック時→... (3点リーダー)→【↓をコピペ】でボタン押してみ! Dim dbo As DAO.Database 'DAO使用時のお決り文句 Dim rst As DAO.Recordset 'DAO使用時のお決り文句 Dim sSqlStr As String 'SQL文 Dim sTO As String 'sTO = "宛先のアドレス入れ。" Dim sCC As String 'sCC = "カーボン・コピー" Dim sBCC As String 'sBCC = "目隠しのCCだっけ?" '「メアドマスタ」テーブルのチェックが付いている物だけを抽出。 sSqlStr = "SELECT mail FROM メアドマスタ WHERE (送信=True)" Set dbo = CurrentDb Set rst = dbo.OpenRecordset(sSqlStr) Do Until rst.EOF If sTO = "" Then sTO = Trim(rst.Fields("mail")) Else sTO = sTO & ";" & Trim(rst.Fields("mail")) End If rst.MoveNext Loop rst.Close dbo.Close '↑【sTO】変数の中に【my@my.com;you@you.com;who@who.com】って '感じに文字を当てはめる作業をしている。 'ちなみにCCやBCCもチョットソース変えれば使えるよん。sTO → sCCに変えたりとか。 DoCmd.SendObject acSendTable, "メアドマスタ", acFormatXLS, "'" & sTO & "'", "", "", "件名", "本文" 'ソースが汚いのは素人だから許せ!
- ARC
- ベストアンサー率46% (643/1383)
>VBA(VB)を基礎から分かりやすく解説しているような お勧めの書籍には何がありますか。 私がVBを習得したのがもう5~6年前になるので、今となっては、どれが良かったのか、よく覚えていません。(お役に立てなくて申し訳無いです) ただ、VB等の言語を学習するときには、同じような内容の本が2~3冊程度は必要だと思います。 同じ事柄についてかかれている部分でも、本によって考え方やとらえ方が違ってたりしますし、何よりもサンプルプログラムの量が増えるのがいいです。 同じ動作をするプログラムを見比べながら学習すると、一つだけの場合に比べ、かなり学習効率が高くなるんですよね。 >といってすべてシステム会社にお願いする予算もない というありさまです 今回の場合のように、機能1個だけ、という場合には、それほど料金はかからないと思いますよ。 請け負う会社にもよりますが、数千円から数万円程度で、お使いのシステムに機能を組み込んでくれると思います。 タウンページなどで、お近くのソフトウェア開発会社を検索し、問い合わせてみられたらいかがでしょうか。 それ以外の方法としては、Accessを教えてくれるパソコン教室に入学して、「授業」と称して先生に無理やり作ってもらうってのも有りなんじゃないでしょうか(笑)。 ↓インターネット上の「タウンページ」です。
回答ではありません。 点数の入れ方は、至って簡単で、質問者の方が、 「回答する・回答を締め切る」というリンクを クリックすれば、点数を入れられるページに いくので、そこで、選択すればOKです。 ちなみに、そこのところは、ヘルプに書かれて いるので、参考にしてください。 ではでは☆
- ARC
- ベストアンサー率46% (643/1383)
真剣に取り組んだわけではないので、確かな答えではありませんが、多分、できません。 マクロで使える機能のほとんどはVBAからも扱えるので、ここは一つVBAに取り組まれてはいかがでしょうか。 ちなみに、「オブジェクトの送信」と同等の機能は、 DoCmd.SendObject ですね。 ヘルプでDoCmdの項目をごらんになれば、マクロで使えるほとんどの機能が、DoCmd.XXX と記述するだけで使えることが分かると思います。 Accessを思い通りに使うためには、VBAの記述は避けては通れないことですので、今後ともAccessを使っていくんであれば、さわりの部分だけでも覚えておけばいいんじゃないでしょうか。 ちょっと作ってみましょうか。(どうせヒマですし) 「宛先一覧クエリー」(フィールド名"e-mail")の全員に、「送信内容クエリー」で抽出されたデータを送りたい時は、下記のようにします。 Sub SendMail() Dim AtesakiRST As Recordset Dim AtesakiStr As String Dim MailAddress As String On Error GoTo HandleErr '宛先の一覧を、コンマ区切りで生成する '宛先の一覧を取得 Set AtesakiRST = CurrentDb.OpenRecordset("宛先一覧クエリー") Do Until AtesakiRST.EOF MailAddress = Nz(AtesakiRST![e-mail], "") If MailAddress <> "" Then 'コンマ区切で、文字列を生成 AtesakiStr = AtesakiStr & "," & MailAddress End If AtesakiRST.MoveNext Loop '先頭のコンマを削除 If Left$(AtesakiStr, 1) = "," Then AtesakiStr = Right(AtesakiStr, Len(AtesakiStr) - 1) End If 'メッセージの送信 DoCmd.SendObject acSendQuery, "送信内容クエリー", acFormatXLS, , , AtesakiStr, "題名", "メッセージ" '終了 ExitHere: Exit Sub 'エラー処理 HandleErr: MsgBox "エラー発生!!" & vbNewLine & Err.Description Resume ExitHere End Sub 5分で作って5分でバグ取りしただけのものなんで、「ちゃんと使える」かどうかは疑問ですが、まぁ、参考程度にはなると思います。 (ちなみに著作権うんぬんは主張しません。勝手に使ってくださって結構です。)
お礼
早速のご回答有難うございます。 お書き頂いたVBAの記述なんとなく、ほんの少し わかるような気がします。 当方、中堅製造メーカーで現場のあわただしさの中で 夜まではほとんど静かにプログラムをかじれるような環境ではなく、おまけに年齢的に頭もなかなか回らなくなりVBA(VB)にはずっと踏み込む勇気がない状態です。 かといってすべてシステム会社にお願いする予算もない というありさまです。 VBA(VB)を基礎から分かりやすく解説しているような お勧めの書籍には何がありますか。 本屋には余りにも多すぎて選択が困難です。 今から約20年前ですけどBASIC、FORTRANは学生時代に かじりました。 しかし、その後はまったく空白です。 脳みそもかなり腐ってきていると感じていますが、、 そういう人間向けの書籍がありましたら宜しくお願いします。
補足
このシステム初めて使うのですが、 どうやって、回答頂いた方に点数を入れるのですか?