Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : Access 2016)
添付ファイル型のフィールドに追加したファイルをメール添付する方法
投稿日時: 22/10/11 12:25:43
投稿者: aokiiiii

Accessで案件管理システムを作成しています。
Accessの入力フォーム(添付ファイル型のフィールドにファイル追加する項目もフォーム内に設けています)に必要項目を入力後、登録ボタンを押下するとテーブルにレコードの追加がされ、その後、入力内容を反映したoutlookのメールが自動で立ち上がるVBAを組んでいます。
outlookの立ち上げはCreateObject関数にてoutlookアプリケーションの起動とCreateItemでメール作成を行います。
 
このメールに、入力フォーム内の、添付ファイル型のフィールドに追加したファイルを自動添付する方法はないでしょうか?
 
添付ファイル型にファイル追加する際、元のファイルのパスを取得してコピーする、なども考えましたが、難しくてコードを書けません…。
 
シンプルな方法はないでしょうか。
お知恵を貸していただきたく、よろしくお願いいたします。

回答
投稿日時: 22/10/11 12:33:46
投稿者: taitani
投稿者のウェブサイトに移動

以下の情報について参照してみてください。
 
https://tsware.jp/tips/tips_256.htm

回答
投稿日時: 22/10/11 14:12:51
投稿者: sk

引用:
添付ファイル型のフィールドにファイル追加する項目もフォーム内に設けています

引用:
outlookの立ち上げはCreateObject関数にてoutlookアプリケーションの起動とCreateItemでメール作成を行います。

引用:
入力フォーム内の、添付ファイル型のフィールドに追加したファイルを自動添付する方法はないでしょうか?

添付ファイル型のフィールドに格納されているファイルを
Outlook のメールアイテムに対してダイレクトに添付する命令は
Access にも Outlook にも実装されていません。
 
DAO.Field2 オブジェクトの SaveToFile メソッドによって
一旦どこかのフォルダにそれぞれのファイルを保存した後、
Outlook.Attachments オブジェクトの Add メソッドを呼び出す際に
メールに添付したいファイルのパスを指定する、というのが
基本的な処理の流れとなります。

回答
投稿日時: 22/10/11 15:05:25
投稿者: taitani
投稿者のウェブサイトに移動

taitani さんの引用:
以下の情報について参照してみてください。
 
https://tsware.jp/tips/tips_256.htm

 
"添付ファイル型のフィールドに追加したファイルを自動添付"
見逃しておりました、失礼いたしました。

回答
投稿日時: 22/10/11 15:59:47
投稿者: Suzu

引用:
このメールに、入力フォーム内の、添付ファイル型のフィールドに追加したファイルを自動添付する方法はないでしょうか?
 
添付ファイル型にファイル追加する際、元のファイルのパスを取得してコピーする、なども考えましたが、難しくてコードを書けません…

 
SenObject メソッド を使う場合には、
添付ファイル型に入っているファイルではなく
添付ファイル型のフィールドに入れる 前 のデータファイルを指定しますから・・
 
 
すでに回答がされていますが 直接 の方法はありません。
 
A】ファイル添付型/OLEオブジェクト型の場合
 1. 一度、どこかに保存
 2. 保存したファイルのフルパスを指定する
  の流れになります。
 
 フィールド に追加する前のファイルのフルパスが判っているなら
 ファイルを保存する 手間が無い分、ラクです。
 
  ただ、既に入力されたレコードの 添付ファイルを添付する際には、
 結局、添付ファイル型フィールドのデータを、一旦ファイルを保存するする必要があります。
 
 
そうではなく、元々、添付ファイル型のフィールドに保存するのではなく
 
B】テキスト型のフィールドに、元々のファイルのフルパスを保存する方法
 もあります。
 それであれば、そのフルパスをtaitani さんが紹介されているコード中の
  Attachmentsオブジェクトに渡せます。
 ただし、レコードとして保存されているのはパスだけなので、
 そのパスのファイルが見つからなかった時の処理が必要です。
 
 
それぞれメリット・デメリットがあります
 
フィールドにファイルを保存
 1)ファイルをそのものを保存しているので、フィールドに対しファイルを保存した後に
  元のファイルを改変等を行っても、その影響を受けない
 
 2)ファイルそのものを保存するので、ファイルパスの影響を受けない
   (accbdファイルをファイルサーバー等、共有に置くとき
    ファイルパス保存の際に、ローカルパスを保存すると、ファイルを参照できない)
 
 3)ファイルそのものを保存するので、accdbファイルの容量が大きくなる
  (ファイルサイズ 2GB、テーブルサイズ2GBの制限に注意が必要)
 
 4)添付ファイル型の場合、1レコード、1フィールドに 複数のファイルを保存できる
   (・添付ファイル保存用の別テーブルを用意し、リレーションを張る事で
     1レコードに対し、複数ファイル/ファイルパスを 保存できる
    ・テキスト型のフィールドに、特定文字を区切り文字として、複数パスを保存する
    で、対応は可能)
 
フィールドにパスを保存 の場合は逆になります。
 
 
何にしても、 Attachmentsオブジェクト に「パス」を渡すのに変わりはありません。

投稿日時: 22/10/11 21:43:01
投稿者: aokiiiii

taitani様
投稿後早速にご回答いただき、ありがとうございました。
他の回答者の皆様の回答も拝見し、やはりフィールドに登録したファイルを直接何とかしようとするのは難しそうですので、ファイルパスを取得してAttachmentsオブジェクトでメール添付をしようと思います。
ご教示いただいたサイトを参照しつつ、コードを書いてみます。
ありがとうございました。

投稿日時: 22/10/11 22:01:23
投稿者: aokiiiii

sk様
ご回答いただき、ありがとうございます。
一旦、SaveToFileメソッドでファイルをデスクトップ等に保存させて、そのパスでAttachmentsオブジェクトにつなげてみようと思います。

投稿日時: 22/10/11 22:14:48
投稿者: aokiiiii

Suzu様
詳細にご教示いただき、ありがとうございます。
ユーザが多くなると人の手でパスを指定させるのはやはり不安ですので、ファイルは添付ファイル型フィールドに保存し、VBAでパスを指定・使用する方法をとろうと思います。

投稿日時: 22/10/12 18:09:28
投稿者: aokiiiii

皆さま
SaveToFileメソッドを使用して、データベースへの登録とメールへの自動添付が両立するVBAを組むことができました。
スレッドは解決済みにさせていただきます。
ご教示いただき、ありがとうございました。