Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : 指定なし)
メール作成及び転記方法
投稿日時: 18/06/25 11:10:46
投稿者: Snow

  お世話になります。
EXCELのデータを使用してOutlookのメールを作成する式を考えているのですが
EXCELのセルB6〜B14の間のデータを本文として転記したいのですが
下記の式だとエラーになってしまいます。
「 Body = Replace(Range("B6").Value, vbLf, vbCrLf) & .Body 」
だと、B6だけ転記されるので、("B6:B14")が間違っているのか
もしくはそもそものbody部分の式が違っているのか ご教授いただけませんでしょうか
 
 
  ' Outlookのメールを作成する
    Dim ol As Object
     
    ' 起動しているOutlookを取得する
    Set ol = GetObject(, "Outlook.Application")
    If ol Is Nothing Then Exit Sub ' Outlookが起動していない場合、終了する
     
    ' メールを作成する
    With ol.CreateItem(0)
        .To = Range("B2").Value ' 宛先
        .CC = Range("B3").Value ' CC
        .BCC = Range("B4").Value ' BCC
        .subject = Range("B5").Value ' 件名
        .Display ' 表示
        .Body = Replace(Range("B6:B14").Value, vbLf, vbCrLf) & .Body ' 本文(署名を本文の下部に表示)
    End With
     
    Set ol = Nothing
End Sub

回答
投稿日時: 18/06/25 14:24:31
投稿者: sk

引用:
Dim ol As Object

Dim ol As Object
Dim varCell As Variant
Dim varCells As Variant
Dim strBody As String
 
varCells = Range("B6:B14").Value
If IsArray(varCells) Then
    strBody = ""
    For Each varCell In varCells
        strBody = strBody & _
                  Replace(varCell, vbLf, vbCrLf) & _
                  vbCrLf
    Next
Else
    strBody = Replace(varCells, vbLf, vbCrLf) & _
              vbCrLf
End If
 
引用:
.Body = Replace(Range("B6:B14").Value, vbLf, vbCrLf) & .Body

.Body = strBody & .Body
 
引用:
("B6:B14")が間違っているのか
もしくはそもそものbody部分の式が違っているのか

・2 つ以上のセルを参照する Range オブジェクトの
  Value プロパティによって返されるのは、単一のデータ
 (数値/文字列/日時)ではなく 2 次元配列である。
 
・Replace 関数の第 1 引数 Expression に
 配列を渡すことはできない。

投稿日時: 18/06/26 11:49:17
投稿者: Snow

解決しました
ありがとうございます。