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

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

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

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

Outlook

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

解決済

VBA 実行時エラー'438' の解決

r_o_234
r_o_234

総合スコア0

VBA

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

Outlook

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

2回答

0評価

0クリップ

4289閲覧

投稿2020/04/08 04:36

前提・実現したいこと

エクセルのVBAとOutlookを連携させて一括送信メーラーを創っています。
一括送信メーラーにファイル添付機能を追加するため、
以前創ったVBAと統合した所、以下のエラーメッセージが発生しました。

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

実行時エラー'438'オブジェクトは、このプロパティまたはメソッドをサポートしていません。

該当のソースコード

VBA

Sub ovba() 'ファイルの選択ダイアログを表示して 'ファイルのパスを取得します Dim fType, prompt As String Dim fPath As Variant Dim ws As Worksheet Dim ObjMail As Object Dim objOutlook As Outlook.Application Dim i As Long Dim rowMax As Long Dim wsList As Worksheet Set ObjMail = CreateObject("Outlook.Application") Set objOutlook = New Outlook.Application Set wsList = ThisWorkbook.Sheets("送信先") Set wsMail = ThisWorkbook.Sheets("メール内容") '選択できるファイルの種類はすべてのファイル fType = "" 'ダイアログのタイトルを指定 prompt = "Excelファイルを選択して下さい" 'ファイル参照ダイアログの表示 fPath = Application.GetOpenFilename(fType, , prompt) If fPath = False Then 'ダイアログでキャンセルボタンが押された場合は処理を終了します End End If 'B2セルにファイル名をセット wsMail.Cells(10, 3).Value = fPath '--- 添付ファイルのパス ---' Dim attachmentPath As String attachmentPath = fPath '--- 添付ファイルを設定 ---' Call ObjMail.Attachments.Add(attachmentPath) With wsList '送信先の件数 rowMax = .Cells(Rows.Count, 1).End(xlUp).Row '送信先の件数分繰り返す For i = 2 To rowMax Set ObjMail = objOutlook.CreateItem(olMailItem) With ObjMail ObjMail.To = wsList.Cells(i, 4).Value 'メール宛先 ObjMail.Subject = wsMail.Range("B1").Value 'メール件名 ObjMail.BodyFormat = olFormatPlain 'メールの形式 ObjMail.Body = wsMail.Range("B2").Value 'メール本文 ObjMail.Display 'Outlookの下書きをDisplayする End With Next i End With End Sub

試したこと

438エラー自体はよく遭遇します。
今回、デバッガが49行目のCall ObjMail.Attachments.Add(attachmentPath)で止まるので、
添付ファイルのアップロード処理を記述したfpath近辺のVBAがおかしいと思い試行錯誤しております。

また、前半のDim objOutlookとDim ObjMailの変数宣言でも同一の処理を入力してしまっていると思い、
今手入力で新しくVBAを創りなしてデバッグしています。

もしこの438エラーの原因等がおわかりになれば教えてください。
よろしくお願いします。

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

Windows10
Excel 2019
Outlook 2019

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

VBA

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

Outlook

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