質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Q&A

解決済

1回答

8383閲覧

VBAでoutlookにPDFを添付したい

hiro_01

総合スコア7

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

0グッド

0クリップ

投稿2021/01/30 07:06

編集2021/01/30 07:15

前提・実現したいこと

エクセルVBAでoutlookを立ち上げ、事前にデスクトップに保存しておいたPDFを
outlookに添付後、送信。という形を取りたいです。

現在outlookに添付しようとしたところでエラーがでました。

尚、事前に作成したPDFの名前はエクセルのセル"B5"の文字列がそのまま名前になっています。
マクロ完成後は不特定多数で使用予定です

発生している問題・エラーメッセージ

実行時エラー13 型が一致しません。

該当のソースコード

vba

1 Dim OL As outlook.Application 2 Set OL = CreateObject("Outlook.Application") 3 Dim ws As Object, dt As Variant 4 Dim outlook As Object 5 Dim mail As Object 6 Set ws = CreateObject("WScript.Shell") 7 Dim MI As outlook.MailItem 8 Set MI = OL.CreateItem(olMailItem) 9 10 Dim R As Range 11 Set R = Range("B5") 12 dt = ws.SpecialFolders("Desktop") \ R 13 14 Set outlook = CreateObject("Outlook.Application") 15 Set mail = outlook.CreateItem(0) 16 With mail 17 .BodyFormat = 2 18 .To = "xxxxxxxxxxxx@gmail.com" 19 .Subject = "テスト送信" 20 .Body = "テスト送信です" 21 .Attachments.Add dt & ".pdf" 22 .Send 23 End With 24 25 MI.Display

試したこと

上記コードの変数Rの部分を省いたりしましたが
エラーが出てしまいました

補足情報(FW/ツールのバージョンなど)

office2016

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/01/30 07:08 編集

PDFでなければ添付はできたのでしょうか。 あと添付なしでメール送信はできてるのでしょうか。
hiro_01

2021/01/30 07:21

上記、修正させて頂きました。 添付なしであればDisplayで表示させた後に、送信まではできる状態です。
guest

回答1

0

ベストアンサー

質問のエラーの原因はおそらく下記でしょう。

vba

1dt = ws.SpecialFolders("Desktop") \ R

PDFファイルのパスを生成しようとしているのだと思いますが、文字列なので、下記のようにしないと方不一致エラーになります。(文字列の扱いの基本です。)

vba

1dt = ws.SpecialFolders("Desktop") & "\" & R.Text

そもそも、
CreateObject("Outlook.Application")を2度したり、意味不明のコードになってます。コードの意味を理解せずに、複数の場所から切り貼りしたような印象ですね。

現状のコードの無駄なコードを削除して、読みやすいように並べ替えてみました。
それぞれのコードの簡単な意味をコメントにつけました。

vba

1 2 'Outlookのインスタンス生成 3 Dim OL As outlook.Application 4 Set OL = CreateObject("Outlook.Application") 5 'メールオブジェクトの生成 6 Dim MI As outlook.MailItem 7 Set MI = OL.CreateItem(olMailItem) 8 9 10 'PDFファイル名生成 11 Dim R As Range, ws As Object, dt As Variant 12 Set R = Range("B5") 13 Set ws = CreateObject("WScript.Shell") 14 dt = ws.SpecialFolders("Desktop") & "\" & R.Text 15 16 With MI 17 .BodyFormat = 2 18 .To = "xxxxxxxxxxxx@gmail.com" 19 .Subject = "テスト送信" 20 .Body = "テスト送信です" 21 .Attachments.Add dt & ".pdf" 'ファイル添付 22 .Send 'メール送信 23 End With 24 25 MI.Display

投稿2021/01/30 09:50

hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro_01

2021/01/31 03:44

解答を頂くどころか、コードまで記述して頂きありがとうございます! 仰る通り、理解等はしようとせずにとりあえず・・・でやっておりました。 この度はお答え頂きありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問