• 締切済み
  • すぐに回答を!

ACCESSで自動でメールをおくる時に任意のアドレスに送りたい

工場にてACCESS97を使い、営業からの発注に対して納期の回答やもろもろのデータをメールにて任意のアドレスに送りたいのですが、当方VBAはまったく使えず、クエリーの使い倒しとマクロにて、結構ややこしい処理をしています。 マクロにてオブジェクトの送信で行うと、 マクロの記述内でアドレスを書きこむかあるいはブランクにしておき、送信時に送り先を入力するかしか手がないのでしょうか? 該当する営業にその人に関わるデータのみ送りたいので 営業全員におくるわけもゆかないのです。 VBを使うしか手がないのでしょうか?

noname#1745
noname#1745

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数443
  • ありがとう数4

みんなの回答

  • 回答No.4

・・・。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 & "'", "", "", "件名", "本文" 'ソースが汚いのは素人だから許せ!

共感・感謝の気持ちを伝えよう!

  • 回答No.3
  • ARC
  • ベストアンサー率46% (643/1383)

>VBA(VB)を基礎から分かりやすく解説しているような お勧めの書籍には何がありますか。 私がVBを習得したのがもう5~6年前になるので、今となっては、どれが良かったのか、よく覚えていません。(お役に立てなくて申し訳無いです) ただ、VB等の言語を学習するときには、同じような内容の本が2~3冊程度は必要だと思います。 同じ事柄についてかかれている部分でも、本によって考え方やとらえ方が違ってたりしますし、何よりもサンプルプログラムの量が増えるのがいいです。 同じ動作をするプログラムを見比べながら学習すると、一つだけの場合に比べ、かなり学習効率が高くなるんですよね。 >といってすべてシステム会社にお願いする予算もない というありさまです 今回の場合のように、機能1個だけ、という場合には、それほど料金はかからないと思いますよ。 請け負う会社にもよりますが、数千円から数万円程度で、お使いのシステムに機能を組み込んでくれると思います。 タウンページなどで、お近くのソフトウェア開発会社を検索し、問い合わせてみられたらいかがでしょうか。 それ以外の方法としては、Accessを教えてくれるパソコン教室に入学して、「授業」と称して先生に無理やり作ってもらうってのも有りなんじゃないでしょうか(笑)。 ↓インターネット上の「タウンページ」です。

参考URL:
http://itp.ne.jp/servlet/jp.ne.itp.sear.SCMSVTop

共感・感謝の気持ちを伝えよう!

  • 回答No.2
noname#9414
noname#9414

回答ではありません。 点数の入れ方は、至って簡単で、質問者の方が、 「回答する・回答を締め切る」というリンクを クリックすれば、点数を入れられるページに いくので、そこで、選択すればOKです。 ちなみに、そこのところは、ヘルプに書かれて いるので、参考にしてください。 ではでは☆

参考URL:
http://www.okweb.ne.jp/help.php3

共感・感謝の気持ちを伝えよう!

  • 回答No.1
  • 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は学生時代に かじりました。 しかし、その後はまったく空白です。 脳みそもかなり腐ってきていると感じていますが、、 そういう人間向けの書籍がありましたら宜しくお願いします。

質問者からの補足

このシステム初めて使うのですが、 どうやって、回答頂いた方に点数を入れるのですか?

関連するQ&A

  • Accessのマクロを使って複数人にメールを送る方法を教えてください。

    Accessのマクロを使って複数人にメールを送る方法を教えてください。 Access2003を使用しています。 いつも、マクロの「オブジェクトの送信」を流用して複数人にメールを送っています。 ・「オブジェクトの送信」だけど、「オブジェクトの種類」や「オブジェクト名」はブランク ・「出力形式」もブランク ・「メッセージ」のところに、メール本文を書く ・「宛先」に送る人間の名前を入れる この方法で問題なくOutlookが起動しメールが配信できたのですが、今回配信したい本文はかなり長文で「メッセージ」部分に入りきりません(文字数オーバーで後半が切れる)。 そこで、 ・「オブジェクトの送信」だけど、「オブジェクトの種類」や「オブジェクト名」はブランク ・「出力形式」もブランク ・「メッセージ」も「宛先」も「件名」もブランク ・「テンプレート ファイル」にテンプレート格納先のフォルダとファイル名のパスを記入 にしたのですが、テンプレートとして認識してくれませんでした。 (何もかもブランクのOutlookが一枚立ち上がるのみ・・・) どこがいけなかったのでしょう? というか、そもそもマクロの「オブジェクトの送信」では、テンプレートを使用したメール配信は無理、VBAを使わないとダメなのでしょうか? 詳しい方教えてください。よろしくおねがいします。 (VBAしか使えない場合、書き方も教えていただけると助かります)

  • Access97をAccess2002にするには

    Access97で作成したmdb(オブジェクトは、テーブル(リンクテーブル有り)、クエリ、フォーム、レポート、マクロ(AutoExecのみ)、モジュールを使用)をAccess2002へ移行させようと思うのですが、単純に[ツール]→[データベースユーティリティ]→[データベースの変換]で良いものでしょうか。 もし、何か気をつけなければならないこと、やらなければならないこと等、または変換方法等をご教授いただけないでしょうか。

  • Accessワークシートの変換における条件の付け方

    よろしくお願いします。 ■前提条件 OS:XP Access version: 不明(2003以降だと) 技術力:Accessの初歩段階です。提供されているマクロを いじっている程度。プログラミングをAccessに書いたことなし。 ■サマリー Access-マクロ-ワークシートの変換(エクスポート)でクエリにあるデータの有無を判定し、データがあるクエリのみExcelに出力したいです。 ■詳細 Accessで複数のクエリ(1~10クエリ)があるとします。 そのクエリには、各クエリが参照している大元データによって、 データあるクエリ、ないクエリがあります。 たとえば、クエリの1~5までデータがあり、残りはデータがない とし、データがある1~5まで同一ファイルのExcel出力したいと します。1ファイルの中に5シート(クエリ1~5)ある状態です。 Accessのマクロ-ワークシートの変換で、指定したクエリは同一ファイルに複数シートとして出力できることまではできています。 ※この場合、ワークシートの変換には、すべてのクエリを指定し、 すべて出力することにしています。 ただ、データがないシートを出力したくないのですが、どのように データある、なしを判断し、出力すれば良いのでしょうか? 補足 もしくは、一旦データの有無は関係なく、全てのデータは出力し、 Excelのマクロにて制限するなどが考えれますが・・・

  • Accessのフォームのみ表示させたい

    Accessを起動した際、フォームのみ表示するにはどうすればよいのでしょうか? (Accessを起動すると、オブジェクトメニュー?(テーブルやクエリ等のオブジクトを選択するウィンドウ)を表示させないで、フォームのみを表示させるには?) また、上記と同じようにして、なおかつAccessを起動させないでフォームで起動や終了といったことが出来るのでしょうか? やはりこれはVB等プログラミングでないと出来ないのでしょうか?ちなみに私はプログラミングは全く出来ません。 わかる方、教えて下さい。宜しくお願いします。

  • ACCESSでのインポート処理の自動化

    ACCESS2002を使用して、CSVデータをもとにリストを作成するMDBを作成しました。 このCSVデータは不定期に更新され、更新するごとに新しいファイル名がついて準備されます。 今、マクロを使ってインポートの設定をしようと思ったんですが、ファイル名をきっちり指定しないとできないので、今回のように、そのつど、ファイル名が変わる場合はどのように設定をしていいのかわかりません。 私の希望としては、該当のフォルダを開くとこまでをマクロか何かでして、ファイルの選択は利用者にしてもらって、その後は自動的にインポート定義に基づいてインポートされるようにしたいんです。 こういうことは簡単にできないものでしょうか? VBとかもあまり使ったことがないので、マクロとかで指定できればそのほうが助かります。

  • Access2002のマクロ条件について

    WindowsXPでAccess2002を使用しています。 このたび、過去の方が作成されたAccessを修正することとなりました。 VBAを使用したものではない簡易なファイルですが、マクロの条件を変更しようとしても なかなかうまくいきません。どのようにすれば宜しいでしょうか。 ---------------- ≪現在の仕様≫ テーブル名:T#ZIP フォーム名:F#Select クエリ名:Q#Delete、Q#Import マクロ名:M#Create_Table (1)Access起動時(の設定)は「F#Select」というフォームが開く (2)下記マクロ「M#Create_Table」が実行される  マクロ1行目:下記条件のとき、マクロを中止する          [Forms]![F#Select]![CRTDATE]=Date()  マクロ2行目:テーブル「T#ZIP」のデータを削除するクエリ「Q#Delete」を実行する  マクロ3行目:テーブル「T#ZIP」にデータを追加するクエリ「Q#Import」を実行する ≪動き≫ 前提:「F#Select」の[CRTDATE]というフィールドには「T#ZIP」が更新された日が設定される その日初めてそのAccessを開くと、マクロにより削除クエリ~追加クエリが順番に実行された後、 フォーム「F#Select」が表示される。その後Accessを終了し、同日中に再度Accessを開いても マクロは実行されない --------------- 現在、追加するデータが多い場合、時間がかかりインポートが途中で失敗することがあるのですが 再度Accessを開いても既にインポート済みと判定されてしまい、自動的にはマクロは実行されない という課題があります。 インポートが失敗するとき、削除は完了しているため、テーブルデータは0件なので、 「その日に既にテーブルを更新済み かつ テーブルデータ件数が1件以上ある場合」 マクロを中止する、という条件を設定したいと思います。 そこで、マクロ1行目の条件欄に [Forms]![F#Select]![CRTDATE]=Date() And DCount("[T#ZIP]","*")>0 と記載したところ、その日最初のインポートはうまく行っている様子ですが、 マクロ終了後に突然Accessが終了したり、再度Accessを開いても「F#Select」が 全く表示されなくなったりと、うまくいきません。 バグというよりは、私の設定が悪いのだと思われますので、 ・フォーム[F#Select]の[CRTDATE]フィールドが Date()   かつ ・テーブル[T#ZIP]に1件以上でもデータがある 場合はマクロを中止する としたい場合の条件設定方法(入力内容)につきまして、どなたかおわかりの方 ご教示いただけますでしょうか。 何卒よろしくお願いいたします。

  • Access Excel出力する保存先を指定したいのですが?

    Access初心者です。2003です。 7000ほどのデータを70ほどの抽出条件ごとにエクセルにしています。 抽出条件毎にクエリを複数作成し、各クエリが抽出したデータをマクロでエクセルに出力させています。このマクロをクエリ分作成し、別のマクロでその複数マクロをいっせいに実行させています。マクロには「コマンドの実行」で「Excelに出力」を使用しています。このアクションを使用するとマイドキュメントにエクセルが保存されてしまいます。(たまにディスクトップになります。) この保存先を指定したいのです。ダイアログではなく、設定した任意のフォルダにいっせいに収まるようにです。 「出力」アクションだと保存先のダイアログが出てくれますが、クエリの数が多いので手作業が増えてしまいます。「コマンドの実行」のExcel出力ですと手作業が無いのですが、マイドキュメントに保存されてしまいます。 私がツールを作成し、Accessを知らない人間がフォーム画面で使用するのでなるべく自動化したいと考えています。 へたくそな文ですが、どなたか助けてください。

  • Access&VB

    2つほど質問があるのですが、 1.VBからDAOでパスワードがかかっているACCESSに接続する場合に引数はどのように設定したらよいのでしょうか? 2.ACCESSでクエリーを作成し、そのクエリーの結果をエクセルにエクスポートするという処理をやります。 このときクエリーはパラメータを要求します。どこかのタイミングでパラメータをわたせないでしょうか? 具体的にはこんな感じです。 Dim objDb As Object Dim appAccess As Object Set appAccess = CreateObject("Access.Application") appAccess.OpenCurrentDatabase "パス名\Memo.mdb" appAccess.DoCmd.TransferSpreadsheet 1, 8,"クエリー名","パス名.xls", False,"" もしくは、 appAccess.DoCmd.RunMacro "マクロ名" (マクロの中身は「TransferSpreadsheet」) 分りにくい説明ですが、よろしくお願いします。

  • VBからACCESSレポートの出力について

    仕事で住所録データベースを作っているところなのですが、 色々と分からないことがあるので、是非、相談に乗って下さい。 VBからACCESSレポートの出力について、行っているのですが データベースから、自分の条件にあったデータだけを取ってきたい のですが、どうしたらよいのでしょうか?? ちなみに、ACCESSのクエリを実行して、欲しいデータを取ってくる のではなく、VB上の画面に入力したデータで、ACCESSのデータを 検索を行うものです。 例えばこんな感じです。 ↓ VBで検索一覧画面から、社員番号を入力する。(テキストボックス) ↓ 実行ボタンを押したとき、テキストボックスに入った社員番号を 自動的に読み取り、ACCESSのデータベースから データを検索する。 こんな感じです。分かりにくい説明ですいませんが 宜しくお願いします。

  • AccessのクエリをEXCELのVBAを使用して置き換える方法をご教

    AccessのクエリをEXCELのVBAを使用して置き換える方法をご教示願います。 AccessデータはE:¥生産管理¥生産.mdbで現状データ内 受注残とゆうクエリ (受注NO 品番 品名 納期 受注残で並んでいます)を Office Links→Excelの出力処理にてExcelデータに変換しこのデータを 元データにし品番を縦ならび、納期を横並びにしてどの日付に何個受注が残っているかが わかるようにVBAで処理するようにしております。 横並びにする理由は資材発注などで結構先の受注を確認して自動計算するためです。 上記のように自動化されていない Office Links→Excelの出力処理をVBAでやる方法が 検索方法が悪いせいかわかりません。 Office Links→Excelの出力処理もしくは クエリから直接データを引き込む方法をご教授お願いいたします。