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

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

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

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

2回答

2425閲覧

Excelマクロを使ったメール一斉送信

Aityuk0327

総合スコア1

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

0クリップ

投稿2021/11/25 00:51

###質問の具体的な内容
完全な素人です。
Excel VBAを用いて、メールを複数のアドレスへ向けて
宛名付きで送信するマクロを書いています。
ネットで見つけたマクロを参考にしています。

VBAに使って、シートに記載された複数のメールアドレスと宛名を拾い、
個別にメールを一斉送信するためのマクロを書いています。
問題としては、マクロを実行すると、
「実行時エラー'62': ファイルにこれ以上データがありません。」
というエラーを吐いてしまい、一件しかメールを送信できませんでした。

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

「実行時エラー'62': ファイルにこれ以上データがありません。」

該当のソースコード

VBA

1'プログラム0|変数宣言の指定 2Option Explicit 3 4'プログラム1|プログラム開始 5Sub SendMails() 6 7 'プログラム2|変数設定 8 Dim mailaddress As String 9 Dim subject As String, mailbody As String 10 Dim username As String, tsuchi As String 11 Dim ws As Worksheet 12 Dim cmax As Long 13 Dim i As Long 14 Dim txtfile As String, txtpath As String, attachedfile As String 15 Dim txt As TextStream 16 17 'プログラム3|FileSystemObjectの設定 18 Dim fs As Scripting.FileSystemObject 19 Set fs = New Scripting.FileSystemObject 20 21 'プログラム4|テキストファイルの情報の取得 22 txtfile = "メール本文.txt" 23 txtpath = ThisWorkbook.Path & "\" & txtfile 24 Set txt = fs.OpenTextFile(Filename:=txtpath, IOMode:=ForReading) 25 26 'プログラム5|メール件名の取得 27 subject = Split(txtfile, ".")(0) 28 29 'プログラム6|添付ファイルを取得 30 attachedfile = ThisWorkbook.Path & "\添付ファイル.jpg" 31 32 'プログラム7|ワークシート設定 33 Set ws = Worksheets("名刺一覧") 34 35 'プログラム8|各シートの記載情報を取得 36 cmax = ws.Range("A50000").End(xlUp).Row 37 38 'プログラム9|Outlookメール送信用の変数設定 39 Dim OutlookObj As Outlook.Application 40 Dim myMail As Outlook.MailItem 41 Set OutlookObj = CreateObject("Outlook.Application") 42 43 'プログラム10|シート「名刺一覧」の情報を取得 44 For i = 5 To 6 45 46 'プログラム11|H列のON/OFFでメール通知設定を決定 47 tsuchi = ws.Range("H" & i).Value 48 If tsuchi = "ON" Then 49 50 'プログラム12|メール本文とメールアドレスを取得 51 username = ws.Range("F" & i).Value 52 mailbody = Replace(txt.ReadAll, "{宛名}", username) 53 mailaddress = ws.Range("G" & i).Value 54 55 56 'プログラム13|Outlookメールを作成 57 Set myMail = OutlookObj.CreateItem(olMailItem) 58 59 'プログラム14|メール内容を設定 60 myMail.BodyFormat = 3 61 myMail.To = mailaddress 62 myMail.CC = "" 63 myMail.subject = subject 64 myMail.Body = mailbody 65 66 'プログラム15|添付ファイルがあればメールに添付 67 If attachedfile <> "" Then 68 myMail.Attachments.Add (attachedfile) 69 End If 70 71 'プログラム16|メール送信 72 myMail.Display 'メール表示(ここでは誤送信を防ぐために表示だけにして、メール送信はしない) 73 myMail.Send 'ここをコメントアウトすることでメール送信しないことも可能 74 ws.Range("I" & i).Value = "送信完了:" & Now() 75 76 'プログラム17|オブジェクト解放 77 Set myMail = Nothing 78 End If 79 Next 80 Set OutlookObj = Nothing 81 82'プログラム18|プログラム終了 83End Sub

試したこと

色々調べたりしたのですが、
デバックをしたところ、問題があるのは
'プログラム12の様でした。

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

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

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

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

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

guest

回答2

0

ベストアンサー

for文の中で txt の readall を複数回呼んでいるのが原因ですね

1度読んだらファイルの最後の位置まで読み込み位置がシークするので先に読み込んだデータを変数に入れて置くのがいいかと

投稿2021/11/25 01:30

aaabrt

総合スコア22

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

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

Aityuk0327

2021/11/25 01:36

回答ありがとうございます。 恐縮なのですが、 具体的にどこをどの様に書き直せばいい、等を教えて頂くことはできますでしょうか? わからないことがほとんどなので、教えて頂ければ幸いです。
Aityuk0327

2021/11/25 02:05

重ねて、申し訳ありません。 mailbody = Replace(txt.ReadAll, "{宛名}", username) こちらをプログラム9に持ってくることで、 メールを複数の宛先に送る事はできるようになりました! ですが、宛名が反映されなくなってしまいました。
aaabrt

2021/11/25 02:55

その処理を置いた場所でstring型の変数にtxt.Readallの内容を格納して、そのreplaceの処理は元の場所に戻してtxt.readallを先程のstring型の変数に変えてあげてください
Aityuk0327

2021/11/25 04:03

ご丁寧にありがとうございます!! 解決しました!!
guest

0

メール本文.txtの中身はどうなっていますか?
空だと同様のエラーが出ます。

投稿2021/11/25 01:11

hex309

総合スコア761

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

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

Aityuk0327

2021/11/25 01:24

マクロを保存したファイルと同じファイル内に、 {宛名}様 このメールはテストです。 by me というテキストファイルを文字形式ANSIで保存しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問