excel 将特定工作表范围粘贴到电子邮件正文中

c9x0cxw0  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(99)

我是相当新的VBA编程,我需要一些帮助,我需要在我的工作。我创建了一个工作表,以减少团队工作人员在白天工作中花费的时间,并给予更多信息,我们使用此工作表将团队管理的关键问题的所有信息填写到作战室。当一个关键的问题正在发生时,团队负责为公司发送公告,由于旧的流程在这些公告中缺乏标准化,我决定创建这个带有电子邮件自定义布局的表单。为了防止工作人员编辑此布局,我保护了工作表并创建了带有宏的按钮来生成这些公告,但正如一个新手所看到的那样,它无法正常工作。
下面是此工作表中生成公告的屏幕截图。细胞从B6开始,在L27结束。工作表标识为“Planilha 5”,我需要的是:当工作人员单击工作表中的SEND按钮时,将调用Microsoft Outlook 365中的新消息,并将定义的信息填充到VBA脚本中,并且必须将工作表定义的范围粘贴到邮件消息的正文中。
Announcement screenshot
这是我试图修改以使用的VBA脚本:

Sub EnviarAbertura()
Dim Outlook As Object, Novo_Email As Object, Email_Body As String, b1 As Variant

b1 = Planilha5.Range("B6:L27")

Set Outlook = CreateObject("Outlook.application")

    Email_Body = b1
    
    Set Novo_Email = Outlook.CreateItem(0)
    Corpo = Planilha5.Range("B6:L27").Copy
    
    With Novo_Email
    .SentOnBehalfOfName = "centraldecomandotd@natura.net"
    .Subject = Planilha5.Range("G4")
    .Body = Email_Body
    .Display
    
    End With
    
End Sub

当我注解行'b1 = Planilha5.Range(“B6:L27”)';'Email_Body = b1';'.Body = Email_Body',脚本在没有填充正文的情况下正常工作。
VBA Script working properly
我已经手动粘贴到下面的屏幕截图工作表范围,以显示你们什么我的观察做VBA脚本。
Expected results
请问,有人可以帮助我与此VBA脚本?

ncgqoxb0

ncgqoxb01#

基于Excel数据设置消息正文的方法主要有两种:
1.基于工作表内容构建HTML标记。这基本上就是罗恩在Mail Range/Selection in the body of the mail页面上描述的内容,您可以在其中找到以下示例代码:

Function RangetoHTML(rng As Range)
 Dim fso As Object
 Dim ts As Object
 Dim TempFile As String
 Dim TempWB As Workbook

 TempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"

 'Copy the range and create a new workbook to past the data in
 rng.Copy
 Set TempWB = Workbooks.Add(1)
 With TempWB.Sheets(1)
     .Cells(1).PasteSpecial Paste:=8
     .Cells(1).PasteSpecial xlPasteValues, , False, False
     .Cells(1).PasteSpecial xlPasteFormats, , False, False
     .Cells(1).Select
     Application.CutCopyMode = False
     On Error Resume Next
     .DrawingObjects.Visible = True
     .DrawingObjects.Delete
     On Error GoTo 0
 End With

 'Publish the sheet to a htm file
 With TempWB.PublishObjects.Add( _
      SourceType:=xlSourceRange, _
      Filename:=TempFile, _
      Sheet:=TempWB.Sheets(1).Name, _
      Source:=TempWB.Sheets(1).UsedRange.Address, _
      HtmlType:=xlHtmlStatic)
     .Publish (True)
 End With

 'Read all data from the htm file into RangetoHTML
 Set fso = CreateObject("Scripting.FileSystemObject")
 Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
 RangetoHTML = ts.readall
 ts.Close
 RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                       "align=left x:publishsource=")

 'Close TempWB
 TempWB.Close savechanges:=False

 'Delete the htm file we used in this function
 Kill TempFile

 Set ts = Nothing
 Set fso = Nothing
 Set TempWB = Nothing
 End Function

注意,在获取HTML标记后,您需要使用HTMLBody属性,而不是纯文本Body
1.您可以使用Range.Copy方法在Excel中复制所需的范围,然后使用Word编辑器直接粘贴到邮件正文,请参阅Inspector类的WordEditor属性。该属性返回所显示邮件的Microsoft Word文档对象模型。请参阅Chapter 17: Working with Item Bodies了解更多信息。

相关问题