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

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

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

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

Outlook

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

Q&A

1回答

7374閲覧

VBAでOutlookの下書きフォルダにあるメールを自動送信させたい

sa_world

総合スコア0

VBA

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

Outlook

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

0グッド

1クリップ

投稿2021/01/27 06:37

編集2021/01/27 12:45

前提・実現したいこと

VBAでOutlookの下書きフォルダにあるメールをVBAに送らせるツールを作成しておりますが、
メールの件数に応じてうまく送信することができません。

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

実行時エラー’2147467259(80004005) このメソッドは、インラインの応答メールアイテムと共には使えません。

該当のソースコード

Sub Macro3()

Dim oApp As New Outlook.Application
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim Path As String, WSH As Variant
Set WSH = CreateObject("Wscript.Shell")
Dim DesktopPath As String
DesktopPath = WSH.SpecialFolders("Desktop")

Dim oAcct
Dim oStore

Dim oFolder
Dim cITEM
Dim go As Integer, bo As Integer, l As Integer

Set oAcct = oApp.Session.Accounts("メールアドレス")
Set oStore = oAcct.DeliveryStore

Set oFolder = oStore.GetDefaultFolder(16)

If oFolder.Items.Count = 0 Then Exit Sub End If

For go = 1 To oFolder.Items.Count
Set cITEM = oFolder.Items(go)

On Error GoTo 次の下書きメール送信

cITEM.Send

  Set cITEM = Nothing
On Error GoTo 0

Next

Set oFolder = Nothing
Set FSO = Nothing
'

Exit Sub

次の下書きメール送信:

cITEM.Close 0 l = go + 1 Resume Next

End Sub

VBA

試したこと

2通作成してマクロを走らせ1通目は送れるが2通目が送れない。
1通作成してマクロを走らせ1通目でエラーになり「cITEM.Close 0」のところでデバックとなります。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

下書きから送信された時、下書きから送信トレイや送信済みなどに移動されるので、
oFolder.Items オブジェクトの数が変わってくるので、
Forのカウンターが進む(+1される)けど
下書きの件数が一つ減るので、エラーになるのでは?

For go = 1 To oFolder.Items.Count
Set cITEM = oFolder.Items(go)

On Error GoTo 次の下書きメール送信

cITEM.Send '←※ここで、oFolder.Itemsが更新されるので下書きが一つ減るので
Set cITEM = Nothing
On Error GoTo 0

Next

修正案:ループを後ろから回すように変更するとか?
For go = oFolder.Items.Count To 1 Step -1
Set cITEM = oFolder.Items(go) '後ろからメールitemを取り出す

On Error GoTo 次の下書きメール送信

cITEM.Send '←※ここで下書き、oFolder.Itemsが更新されても、ループがStep -1なのでOK?
Set cITEM = Nothing
On Error GoTo 0
Next

あっ
>実行時エラー’2147467259(80004005)
>このメソッドは、インラインの応答メールアイテムと共には使えません。
↑エラーメッセージの内容が違うので、外しているかな

ループを後ろから回す修正案で、よけいに混乱させてしまったらすみせん。
解決の糸口となれば幸いです。

恥ずかしいけど下記、メールの移動で私がやった同じようなミス
https://www.youtube.com/watch?v=I4XZYWltfqA
https://ken3memo.hatenablog.com/entry/2019/06/06/080000

投稿2021/02/01 04:17

ken3memo

総合スコア132

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問