[[20240328183928]] 『EXCEL VBAメール送信』(kj) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『EXCEL VBAメール送信』(kj)

EXCEL VBAにて、outlookのメール本文に表を差し込みたいです。
以下のmailBody2(B14からC24)が表となりますが、<13:型が一致しません>と mailItemObj.Body = mailBody & vbCrLf & vbCrLf & mailBody2 & creditの箇所でエラーとなってしまいます。対処方法もしくは代替案をお教えいただけますでしょうか。

 'outlookを起動する
    Dim toaddress, ccaddress, bccaddress As String  '変数設定:To宛先、cc宛先、bcc宛先
    Dim subject, mailBody, mailBody2, credit As String '変数設定:件名、メール本文、クレジット、添付
       Dim outlookObj As Outlook.Application    'Outlookで使用するオブジェクト生成
    Dim mailItemObj As Outlook.MailItem      'Outlookで使用するオブジェクト生成

 '差出人、本文、署名を取得する---
    toaddress = Range("B10").Value   'To宛先
    ccaddress = Range("B11").Value   'Cc宛先
    subject = Range("B12").Value '件名
    mailBody = Range("B13").Value    '本文
    mailBody2 = Range("B14:C24") '本文2
    credit = Range("B25").Value      'クレジット

'メールを作成して、差出人、本文、署名を入れ込む---

    Set outlookObj = CreateObject("Outlook.Application")
    Set mailItemObj = outlookObj.CreateItem(olMailItem)

    mailItemObj.BodyFormat = 3      'リッチテキストに変更
    mailItemObj.To = toaddress      'to宛先をセット
    mailItemObj.CC = ccaddress      'ccをセット
    mailItemObj.subject = subject   '件名をセット
    mailItemObj.Body = mailBody & vbCrLf & vbCrLf & mailBody2 & credit   'メール本文 改行 改行 クレジット

< 使用 Excel:Microsoft365、使用 OS:Windows11 >


 >B14からC24
 これが配列になっているので文字列に出来ないからじゃないですか?

 どんな表の文字列にすべきか分かりませんが、
 例えば (Microsoft365なので、以下、数式一発で)

 >' mailBody2 = Range("B14:C24") '本文2
     ↓
     mailBody2 = ActiveSheet.Evaluate _
             ("TEXTJOIN("""",TRUE,BYROW(B14:C24,LAMBDA(body2,TEXTJOIN(""""," & _
                    "TRUE,body2,IF(CONCAT(body2)="""","""",CHAR(13))))))")

(半平太) 2024/03/28(木) 19:45:58


 ↑
 ちょっと、ごてごてし過ぎていました。
 見直し後
 ↓
 mailBody2 = ActiveSheet.Evaluate _
      ("TEXTJOIN("""",TRUE,B14:B24&C14:C24&IF(B14:B24="""","""",CHAR(13)))")

(半平太) 2024/03/28(木) 20:05:16


半平太様、お教えいただき誠にありがとうございます。無事に本文に反映することができましたが、表形式ではなく文字だけとなってしまっております。罫線もつけて本文に追加したいのですがどうすればよいでしょうか。
(kj) 2024/03/29(金) 07:54:16

 どこかのネットで拾ってきたものです。

 Sub macro()
    Dim Ap As Object
    Dim M As Object
    'Excelで選択しているものをコピー(図でも表でもOKです)
    Selection.Copy
    Set Ap = CreateObject("Outlook.Application")
    Set M = Ap.CreateItem(0)
        M.BodyFormat = 3  'リッチテキスト形式
        M.Body = "テストです"  'メールの本文
        M.To = "test @ test"  'アドレス
        M.Subject = "テスト"  '件名
        M.Display  '画面を表示
        With Ap.ActiveInspector
            '貼り付け
            .WordEditor.Windows(1).Selection.Paste
        End With
 End Sub

(xyb4) 2024/03/29(金) 09:52:27


 >罫線もつけて本文に追加したい

 ネットで検索すると、MsWordの力を借りないとそれは出来ないらしいです。
https://extan.jp/?p=6692
 【Outlook VBA】メール本文にExcel表を挿入し作成/送信する方法!

 kjさんのPCにWordも入っているとすると、Wordも参照設定してから、以下の様に変更

 >mailItemObj.Body = mailBody & vbCrLf & vbCrLf & mailBody2 & credit   'メール本文 改行 改行 クレジット
  ↓
   Dim objWRG As Word.Range, strPastePos As String
   strPastePos = "<表挿入位置>"
   mailItemObj.Body = mailBody & vbCrLf & vbCrLf & strPastePos & vbCrLf & credit
   Set objWRG = mailItemObj.GetInspector.WordEditor.Range(0, 0)
   objWRG.Find.Text = strPastePos
   objWRG.Find.Execute
   Range("B14:C24").Copy
   objWRG.Paste

(半平太) 2024/03/29(金) 10:32:09


半平太様、ご返信ありがとうございます。無事に反映することができました。どうもありがとうございました。
(kj) 2024/03/29(金) 15:43:01

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.