Access (VBA)

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

 
(Windows 10 Pro : Microsoft 365)
メールの本文にExcel のデータシートを貼り付ける
投稿日時: 23/02/09 15:40:56
投稿者: takatada72

お世話になります。
 
色々なネットを検索して、下記のようなコードを書きました。
ただ、これだと、エクセル のデータシートが枠線なしでメールの本文に貼り付けられてしまいます。
できれば、エクセルをそのままコピー(枠線有りのスタイル)した形で貼り付けたいのですが、可能
でしょうか
 
おいそがしいと思いますがご指導を宜しくお願い致します。
   
 Dim objOutlook As Outlook.Application
    Set objOutlook = New Outlook.Application
    Dim objMail As Outlook.MailItem
    Set objMail = objOutlook.CreateItem(olMailItem)
     
    Dim objTableRG As Range
    Dim objWRG As Word.Range
    Dim strPastePos As String
    '参照設定で、Microsoft Word **.* Object Library にチェック必要
    strPastePos = "<表挿入位置>"
      
    '--- メールの内容を格納する変数 ---'
    Dim toStr As String
    Dim ccStr As String
    Dim bccStr As String
    Dim subjectStr As String
    Dim bodyStr As String
    Dim bodyStr1 As String
    Dim bodyStr2 As String
      
    '--- 宛先の内容 ---'
    toStr = "ito_to@corporate.com"
    ccStr = "ito_cc@corporate.com"
      
    '--- 件名の内容 ---'
    subjectStr = "【更新】アイテム情報の発行 " & Date & " 付分" '件名
      
    '--- 本文の内容 ---'
      
     'メール本文
    bodyStr = bodyStr + "お疲れ様です、データ配信担当の伊藤です。" & Chr(13) & Chr(10)
    bodyStr = bodyStr & Chr(13) & Chr(10)
    bodyStr = bodyStr + "メールにて更新依頼いただきました、下記アイテムのアイテム報告書を発行いたしました。" & Chr(13) & Chr(10)
    bodyStr = bodyStr + "アイテム報告書は、共有フォルダに保管しておりますので、ご確認よろしくお願いいたします。" & Chr(13) & Chr(10)
    bodyStr = bodyStr & Chr(13) & Chr(10)
    bodyStr = bodyStr & Chr(13) & Chr(10)
      
    bodyStr2 = bodyStr2 & Chr(13) & Chr(10)
    bodyStr2 = bodyStr2 & Chr(13) & Chr(10)
    bodyStr2 = bodyStr2 + "以上、よろしくお願いします。" & Chr(13) & Chr(10)
    bodyStr2 = bodyStr2 & Chr(13) & Chr(10)
    bodyStr2 = bodyStr2 & Chr(13) & Chr(10)
    bodyStr2 = bodyStr2 & Chr(13) & Chr(10)
    bodyStr2 = bodyStr2 & "■□■□■□■□■□■□■□■□■□■□■□■□" & Chr(13) & Chr(10)
    bodyStr2 = bodyStr2 & "会社名" & Chr(13) & Chr(10)
    bodyStr2 = bodyStr2 & "データ配信本部" & Chr(13) & Chr(10)
    bodyStr2 = bodyStr2 & "伊藤" & Chr(13) & Chr(10)
    bodyStr2 = bodyStr2 & "■□■□■□■□■□■□■□■□■□■□■□■□" & Chr(13) & Chr(10)
 
    bodyStr1 = bodyStr & Chr(13) & Chr(10) & "<表挿入位置>" & bodyStr2
     
      
    '--- 条件を設定 ---'
    objMail.To = toStr
    objMail.CC = ccStr
    objMail.Subject = subjectStr
    objMail.Body = bodyStr1
    objMail.BodyFormat = 2 ' 「3」の場合リッチテキスト型となります。「1」はテキスト型、「2」は HTML型となります。
         
    '--- Excelワークシート ---'
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("更新日")
      
    '--- 貼り付ける表の範囲(A1:G10のような文字列) ---'
    Dim 最終行 As Integer
    最終行 = Cells(Rows.Count, 1).End(xlUp).Row
     
    Dim tableAddress As String
    tableAddress = "A1:G" & 最終行
      
      
    '--- メール本文に表を貼り付け ---'
    Call ws.Range(tableAddress).Copy
    objMail.GetInspector().WordEditor.Windows(1).Selection.EndKey Unit:=6, Extend:=0
    Set objWRG = objMail.GetInspector.WordEditor.Range(0, 0)
    objWRG.Find.Text = strPastePos
     
    objWRG.Find.Execute
    objWRG.Paste
     
    '--- メールを表示 ---'
    objMail.Display

回答
投稿日時: 23/02/09 16:34:27
投稿者: taitani
投稿者のウェブサイトに移動

objMail.BodyFormat = 2 を objMail.BodyFormat = 3 に変更してみてもダメでしょうか。
※ Access VBA とありますが、Excel VBA と解釈して回答してます。

回答
投稿日時: 23/02/09 16:36:40
投稿者: taitani
投稿者のウェブサイトに移動

確か前回は
https://www.moug.net/faq/viewtopic.php?t=81937
 
objMail.BodyFormat = 3 でコードを書いた気がしますが。。。

投稿日時: 23/02/09 17:20:18
投稿者: takatada72

taitaniさん
 
早速、ありがとうございました。
 
リッチテキストでも、HTMLにしても罫線は、表示されませんでした。
 
また、https://www.moug.net/faq/viewtopic.php?t=81937は、私が
メッセージの間にデータを貼り付ける質問をさせて頂いた件ですね
罫線までは、できませんでした。
 
大本の下記サイトを参考にさせていただきたいのですが、私にとって、
VBAは、敷居が高く、理解に時間がかかってしまうのです。
taitaniさん、この辺、ご指導頂けないでしょうか
 
https://extan.jp/?p=6692
 
お忙しいとは思いますが引き続き宜しくお願い致します。

回答
投稿日時: 23/02/09 18:00:56
投稿者: taitani
投稿者のウェブサイトに移動

https://www.moug.net/faq/viewtopic.php?t=81937
の VBA のまま動作確認しましたが、私のメールでは表の書式通りに貼り付けできました。
 
objMail.Display を '--- 条件を設定 ---' の下に追加して、
F8 でステップ実行してみてはいかがでしょうか。
 
で、表が貼り付けられたとき、メール上部メニューの、書式設定>形式は
 「リッチテキスト」になっています?
あと、表を選択した場合、左上に「+」のようなマーク出ます?
 
因みに、Outlook はローカルアプリですよね?
 

回答
投稿日時: 23/02/09 18:54:46
投稿者: taitani
投稿者のウェブサイトに移動

ちょっとだけ修正 (赤文字部分)
 
    '--- Excelワークシート ---'
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("更新日")
    ws.activate
       
    '--- 貼り付ける表の範囲(A1:G10のような文字列) ---'
    Dim 最終行 As Integer
    最終行 = ws.Cells(Rows.Count, 1).End(xlUp).Row
      
    Dim tableAddress As String
    tableAddress = "A1:G" & 最終行

投稿日時: 23/02/10 15:09:10
投稿者: takatada72

taitaniさん
 
お疲れさまです。
教えて頂いたところを修正して実施してみました。
メール形式は、HTML、リッチともに、表(枠線有り)にはなりませんでした。
taitaniさんの方は、表になったと言うことは、私のアウトルックが壊れて
いるのでしょうか? 他者に、も試してもらいますね
 
引き続き、お気づきの点がありましたらお知らせを頂けると幸いです。
   
 Dim objOutlook As Outlook.Application
    Set objOutlook = New Outlook.Application
    Dim objMail As Outlook.MailItem
    Set objMail = objOutlook.CreateItem(olMailItem)
      
    Dim objTableRG As Range
    Dim objWRG As Word.Range
    Dim strPastePos As String
    '参照設定で、Microsoft Word **.* Object Library にチェック必要
    strPastePos = "<表挿入位置>"
       
    '--- メールの内容を格納する変数 ---'
    Dim toStr As String
    Dim ccStr As String
    Dim bccStr As String
    Dim subjectStr As String
    Dim bodyStr As String
    Dim bodyStr1 As String
    Dim bodyStr2 As String
       
    '--- 宛先の内容 ---'
    toStr = "ito_to@corporate.com"
    ccStr = "ito_cc@corporate.com"
       
    '--- 件名の内容 ---'
    subjectStr = "【更新】アイテム情報の発行 " & Date & " 付分" '件名
       
    '--- 本文の内容 ---'
       
     'メール本文
    bodyStr = bodyStr + "お疲れ様です、データ配信担当の伊藤です。" & Chr(13) & Chr(10)
    bodyStr = bodyStr & Chr(13) & Chr(10)
    bodyStr = bodyStr + "メールにて更新依頼いただきました、下記アイテムのアイテム報告書を発行いたしました。" & Chr(13) & Chr(10)
    bodyStr = bodyStr + "アイテム報告書は、共有フォルダに保管しておりますので、ご確認よろしくお願いいたします。" & Chr(13) & Chr(10)
    bodyStr = bodyStr & Chr(13) & Chr(10)
    bodyStr = bodyStr & Chr(13) & Chr(10)
       
    bodyStr2 = bodyStr2 & Chr(13) & Chr(10)
    bodyStr2 = bodyStr2 & Chr(13) & Chr(10)
    bodyStr2 = bodyStr2 + "以上、よろしくお願いします。" & Chr(13) & Chr(10)
    bodyStr2 = bodyStr2 & Chr(13) & Chr(10)
    bodyStr2 = bodyStr2 & Chr(13) & Chr(10)
    bodyStr2 = bodyStr2 & Chr(13) & Chr(10)
    bodyStr2 = bodyStr2 & "■□■□■□■□■□■□■□■□■□■□■□■□" & Chr(13) & Chr(10)
    bodyStr2 = bodyStr2 & "会社名" & Chr(13) & Chr(10)
    bodyStr2 = bodyStr2 & "データ配信本部" & Chr(13) & Chr(10)
    bodyStr2 = bodyStr2 & "伊藤" & Chr(13) & Chr(10)
    bodyStr2 = bodyStr2 & "■□■□■□■□■□■□■□■□■□■□■□■□" & Chr(13) & Chr(10)
  
    bodyStr1 = bodyStr & Chr(13) & Chr(10) & "<表挿入位置>" & bodyStr2
      
       
    '--- 条件を設定 ---'
    objMail.To = toStr
    objMail.CC = ccStr
    objMail.Subject = subjectStr
    objMail.Body = bodyStr1
    objMail.BodyFormat = 2 ' 「3」の場合リッチテキスト型となります。「1」はテキスト型、「2」は HTML型となります。
          
    '--- Excelワークシート ---'
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("更新日")
    ws.activate
       
    '--- 貼り付ける表の範囲(A1:G10のような文字列) ---'
    Dim 最終行 As Integer
    最終行 ws.Cells(Rows.Count, 1).End(xlUp).Row
      
    Dim tableAddress As String
    tableAddress = "A1:G" & 最終行
       
       
    '--- メール本文に表を貼り付け ---'
    Call ws.Range(tableAddress).Copy
    objMail.GetInspector().WordEditor.Windows(1).Selection.EndKey Unit:=6, Extend:=0
    Set objWRG = objMail.GetInspector.WordEditor.Range(0, 0)
    objWRG.Find.Text = strPastePos
      
    objWRG.Find.Execute
    objWRG.Paste
      
    '--- メールを表示 ---'
    objMail.Display

回答
投稿日時: 23/02/10 15:14:42
投稿者: taitani
投稿者のウェブサイトに移動

うーん、何が原因がわかりませんね。。。
問題の切り分けとして、貼り付けを行う Excel の範囲を、テーブル化してみてはいかがでしょうか。
※テーブルではない場合、罫線が消え (たように見え) る場合もあるようです。
あと、可能であれば、別の PC でやってみるとか。

投稿日時: 23/02/10 15:45:01
投稿者: takatada72

社内の他者にも協力して試してもらいましたが、罫線は、表示されませんでした。
Excel シートの方にも罫線は、ありませんが、なくても、taitaniさんのメールの方は、
枠線付きで、表示されているのでしょうか
 
また、Excel シートの方に、枠線を記載したら、メールの方にも枠線が表示される
ようになりましたので、罫線を記載するように致します。
 
一応、解決になりますのでありがとうございました。