65579


**前提・実現したいこと**  
エクセルのVBAとOutlookを連携させて一括送信メーラーを創っています。  
指南サイトの手順通りに実装した所、以下のエラーメッセージが発生しました。

**発生している問題・エラーメッセージ**  
コンパイルエラー: メソッドまたはデータメンバーが見つかりません

**該当のソースコード**

[code]

    Sub SendEmail()
    
    Dim objOutlook As Outlook.Application
    Dim i
    Dim rowMax As Long
    Dim wsList As Worksheet
    Dim wsMail As Worksheet
    Dim objMail As Outlook.MailItem
    
    Set objOutlook = New Outlook.Application
    Set wsList = ThisWorkbook.Sheets("送信先")
    Set wsMail = ThisWorkbook.Sheets("メール内容")
    
    With wsList
    
        '送信先の件数
        rowMax = .Cells(Rows.Count, 1).End(xlUp).Row
    
        '送信先の件数分繰り返す
        For i = 2 To rowMax
            Set objMail = objOutlook.CreateItem(olMailItem)
            With wsMail
                .To = wsList.Cells(i, 4).Value       'メール宛先
                .Subject = .Range("B1").Value        'メール件名
                .BodyFormat = olFormatPlain          'メールの形式
                .Body = wsList.Cells(i, 1).Value & vbCrLf & _
                             wsList.Cells(i, 2).Value & " " & _
                             wsList.Cells(i, 3).Value & " 様" & vbCrLf & vbCrLf & _
                            .Range("B2").Value              'メール本文
    
               objMail.Send
            End With
        Next i
    
        Set objOutlook = Nothing
        MsgBox "送信完了"
    
    End With
    
    End Sub
    
[/code]

**試したこと**  
Google検索をして、単なるスペルミスなのか、iの4のセルが原因なのかと考えましたが、わかりませんでした。  
もしおわかりになれば考え方やヒントをご教授願います。

**補足情報（FW/ツールのバージョンなど）**  
Windows 10  
Excel 2019


CC BY-SA 4.0
2020-04-06T07:22:46.620
65392
2020-04-13T06:35:55.390
2020-04-06T07:45:07.963
3060
38336
question
vba excel
VBA コンパイルエラー:メソッドまたはデータメンバーが見つかりません　解決法


With wsMailの内側で

[code]

    .TO = 
    .Subject = 
    .BodyFormat = 
    .Body = 
    
[/code]

としていますが、これだと

[code]

    wsMail.TO = 
    wsMail.Subject = 
    wsMail.BodyFormat = 
    wsMail.Body = 
    
[/code]

と解釈されてしまいます。本来は

[code]

    objMail.TO = 
    objMail.Subject = 
    objMail.BodyFormat = 
    objMail.Body = 
    
[/code]

がやりたかったことではないでしょうか？


CC BY-SA 4.0
2020-04-07T05:21:03.597
65432
2020-04-07T05:21:03.597
37160
65392
answer


> `With`を入れ子にして、内側の`With`で外側のExcelの`.Range()`を使っているからでは？
> 外側の`With`は使う必要が無さそうだし、内側でも素直に`wsList.Range()`を使ってみてはどうでしょう？

Kunifさん
[コメント](https://ja.stackoverflow.com/questions/65392/vba-%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%BE%E3%81%9F%E3%81%AF%E3%83%87%E3%83%BC%E3%82%BF%E3%83%A1%E3%83%B3%E3%83%90%E3%83%BC%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93-%E8%A7%A3%E6%B1%BA%E6%B3%95/65579#comment71673_65392)ありがとうございます。おっしゃる通り、`.Range()`を`wsMail.Range()`と変更し、色々調整した所正常に動作しました。ご協力ありがとうございます！


CC BY-SA 4.0
2020-04-13T05:44:07.300
65579
2020-04-13T06:35:55.390
2020-04-13T06:35:55.390
19110
38336
65392
answer