[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『EXCEL VBAにて、EXCELの表一部をoutlookメール本文に貼り付け』(kana)
例えば、sheet1のA1からC3までの情報を本文に貼り付けたいです。
下記は現在のコードです。どうぞよろしくおねがいします。
'自動メール Sheets("自動保存&メール用").Select 'outlookを起動する Dim toaddress, ccaddress, bccaddress As String '変数設定:To宛先、cc宛先、bcc宛先 Dim subject, mailBody, 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 & Format(Date, "yyyy/m/d") '件名 mailBody = Range("B13").Value '本文 credit = Range("B14").Value 'クレジット
'メールを作成して、差出人、本文、署名を入れ込む---
Set outlookObj = CreateObject("Outlook.Application") Set mailItemObj = outlookObj.CreateItem(olMailItem) mailItemObj.BodyFormat = 2 'htmlテキストに変更 mailItemObj.To = toaddress 'to宛先をセット mailItemObj.CC = ccaddress 'ccをセット mailItemObj.subject = subject '件名をセット mailItemObj.Body = mailBody & vbCrLf & vbCrLf & credit 'メール本文 改行 改行 クレジット
'---コード6|メールを送信する--- 'mailItemObj.Save '下書き保存 mailItemObj.Display 'メール表示(ここでは誤送信を防ぐために表示だけにして、 Sheets("自動保存&メール用").Delete
< 使用 Excel:unknown、使用 OS:unknown >
表の形のまま貼り付けるのは、なんかテクニックが必要だったような・・・ [[20221217123904]] 『Paste出来ない。VBAエラー』(みかん) >(稲葉) 2023/01/21(土) 12:57:15 の投稿をちょっと試してもらって、わからないってことなら、中途半端に情報出さないで コード全文載せて、表の形がどうなっているのか含めて教えてもらえると手助けできるかもしれません。 (稲葉) 2023/05/29(月) 10:28:29
>sheets(sheets1).Range("A1:C3") これが原文ママだとしたら、記述ルールと違うのでエラーになるのは当然だと思いますがそういう問題ではないということですか? (.:*.ゆ ゅ) 2023/05/29(月) 15:55:57
それでしたら、 >(みかん)さん 2023/01/20(金) 10:01:13 の投稿コードなら読み解けますか? こちらでも動くハズです。 (稲葉) 2023/05/29(月) 16:01:19
mailBody = Range("B13").Value '本文 でB13セルに何が入っているのかは知りませんが、 例えばA1:C3セルの値を繋げたいのであれば、 それぞれのセル値を&で繋げばよろしいかと思います。
mailBody = Range("B13").Value & Range("A1").Value & Range("B1").Value & Range("C1").Value & .....
( 'ふ') 2023/05/29(月) 16:24:28
あ、そういうこと? てっきり表の形で載せたいのかと思ってた・・・すません。 (稲葉) 2023/05/29(月) 17:39:10
HTMLなら、下記の関数にRangeオブジェクト渡せば大丈夫だと思う。 かたくなに全文と表の形載せてくれないねぇ。
例 mailBody = GetTableRange(Sheets("Sheet1").Rnage("A1:C1"))
'//指定範囲をHTMファイルで出力し、文字列として取得 Function GetTableRange(ByVal r As Range) As String Dim ws As Worksheet: Set ws = r.Parent Dim wb As Workbook: Set wb = ws.Parent Dim tmpPATH As String: tmpPATH = CreateObject("Wscript.Shell").SpecialFolders("DeskTop") & "\tmp.htm" Dim tmpTable As String If Dir(tmpPATH) <> "" Then Kill tmpPATH wb.PublishObjects.Add(xlSourceRange, tmpPATH, ws.Name, r.Address, xlHtmlStatic).Publish True '■//テキストストリームで取得 tmpTable = CreateObject("Scripting.FileSystemObject").OpenTextFile(tmpPATH, 1).ReadAll tmpTable = Replace(tmpTable, "align=center", "align=Left") '表全体を左寄せに tmpTable = Replace(tmpTable, "General", "Left") '表内の文字を左寄せに GetTableRange = tmpTable Kill tmpPATH End Function (稲葉) 2023/05/29(月) 19:00:49
■1
>デバックエラー
コンパイルエラーの間違いじゃないですか?
(コンパイルエラーは構文として正しくないので、そもそも実行できてない状態です)
>中段の 〜
回答者側では画面が見えませんから、横着せず全部を提示された方がお互い誤解がなくてよいと思います。
■2
私もてっきり、表を貼り付けたいという意味かなと思ったんですが違うんですかね。
表を貼り付けるという意味であれば、↓を参考にすると
【参考】 https://pineplanter.moo.jp/non-it-salaryman/2022/01/07/vba-table-outlook/
↓みたいなことでよいようにおもいます。(変数盛沢山は好きじゃないんで適宜整理しました)
Sub テキトー() Stop 'ブレークポイントの代わり Dim mailItemObj As Outlook.MailItem Set mailItemObj = CreateObject("Outlook.Application").CreateItem(olMailItem)
With Sheets("自動保存&メール用") mailItemObj.BodyFormat = 2 'htmlテキストに変更 mailItemObj.To = .Range("B10").Value 'to宛先をセット mailItemObj.CC = .Range("B11").Value 'ccをセット mailItemObj.Subject = .Range("B12").Value & Format(Date, "yyyy/m/d") '件名をセット
mailItemObj.Display
.Range("A1:C3").Copy mailItemObj.GetInspector().WordEditor.Windows(1).Selection.TypeText .Range("B13").Value & vbCrLf 'メール本文 改行 mailItemObj.GetInspector().WordEditor.Windows(1).Selection.Paste mailItemObj.GetInspector().WordEditor.Windows(1).Selection.TypeText vbCrLf & .Range("B14").Value
'.Delete End With End Sub
※Displayする前に操作する方法がありそうですが、ちょっと調べた限りではわかりませんでした。
(もこな2) 2023/05/29(月) 20:54:52
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.