14歳の自分に衝撃の事実を告げてください

vbaでメール送信時にpdfファイルを2つ添付したいのですが
ファイル名の指定でエラーが出てしまいます。
色々やってみたのですが、現在byref引数の型が一致しませんという
エラーが出ていて進まなくなりました。
教えてください。お願いします。

Sub sendMail_withattach()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("mail")

Dim OutApp As Outlook.Application
Set OutApp = New Outlook.Application

Dim r As Long, lastrow As Long
lastrow = ws.Cells(4, 1).End(xlDown).Row


For r = 4 To lastrow
Dim OutMail As Outlook.MailItem
Set OutMail = OutApp.CreateItem(olMailItem)


Dim attachFile As Outlook.Attachments
Set attachFile = OutMail.Attachments


Dim attachFile2 As Outlook.Attachments
Set attachFile2 = OutMail.Attachments



Dim BodyOfMail As String
BodyOfMail = CreateBodyOfMail(ws, r)

With OutMail
.SendUsingAccount = Session.Accounts("aaa@bbb.com")
.To = ws.Cells(r, 3).Value
.Subject = ws.Cells(2, 5).Value
.body = BodyOfMail
End With

Dim key As String
key = ws.Cells(2, 11).Value

Dim key2 As String
key2 = ws.Cells(2, 11).Value

Call AddAttach(attachFile, key)
Call AddAttach(attachFile2, key2)

OutMail.Display ' OutMail.Save OutMail.Send
Set OutMail = Nothing
Next r
End Sub
Sub AddAttach(attachFile As Object, attachFile2 As Object, key As String, key2 As String)
Dim filename As String
Dim filename2 As String
Dim 案内 As String
Dim チラシ As String

filename = Dir(ThisWorkbook.Path & "\pdf\" & 案内 & "*")
attachFile.Add ThisWorkbook.Path & "\pdf\" & filename

filename2 = Dir(ThisWorkbook.Path & "\pdf\" & チラシ & "*")
attachFile2.Add ThisWorkbook.Path & "\pdf\" & filename2

MsgBox filename & vbCrLf & filename2

Set attachFile = Nothing


End Sub

よろしくお願いいたします

A 回答 (3件)

AddAttach(attachFile As Object, attachFile2 As Object, key As String, key2 As String)


の仮引数の数と型に誤りがある。
attachFileはObjectではなくOutlook.Attachmentsでしょう。

あとOutlook.Attachmentsは、OutMail.Attachmentsを代入しており、それは特定メールの添付ファイルを操作するコレクションオブジェクトでしょう。
ともすれば、そのオブジェクトに添付したい数分のファイルを追加する制御をすればいいわけで、attachFile2を用意する必要はないでしょう。

やりたいことを何でもかんでも混ぜこぜでプログラムするのをやめて、一つずつ課題をクリアしていってみてはいかがでしょうか。
    • good
    • 1
この回答へのお礼

ありがとうございます。
もう一度、やりたいことを書き出してから
一つ一つ書き直してみます。

お礼日時:2024/08/18 21:58

AddAttachの定義では、引数は「オブジェクト2つと、文字列2つ」ですが、呼び出しの時は、「オブジェクト1つと、文字列1つ」になっているからでしょうね。


何故こんなことになったのでしょうか??

プログラム全体は見てませんが、もし、Sub AddAttach が単独で正しく動いているなら、

Call AddAttach(attachFile, key)
Call AddAttach(attachFile2, key2)

Call AddAttach(attachFile, attachFile2, key, key2)
と、引数を合わせれば良いのでは?
    • good
    • 1
この回答へのお礼

ありがとうございます。
引数を合わせるのですね。
やってみます。

お礼日時:2024/08/18 15:09

こんにちは



内容は見てませんけれど・・

>現在byref引数の型が一致しませんという
>エラーが出ていて進まなくなりました。

単純に、
>Sub AddAttach(attachFile As Object, attachFile2 As Object, key As String, key2 As String)
というプロシージャを
>Call AddAttach(attachFile, key)
で呼び出しているので、第二引数の型があっていないだけでは?
(keyはString、attachFile2 はObject)
    • good
    • 2
この回答へのお礼

ありがとうございます。
確かにエラーが出るのは”key”の部分だけです。
考えます。

お礼日時:2024/08/18 15:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A