将Excel范围粘贴到Outlook中

时间:2015-07-20 23:16:05

标签: excel vba outlook

我正在升级Excel宏。我想在每天更改范围的表格中生成电子邮件复制。

Strbody会填充电子邮件,但时间表并未附加。

Sub Ops_button()
'Working in Office 2000-2010
Dim Outapp As Object
Dim Outmail As Object
Dim Strbody As String
Dim Timetable As String

'Auto Email Attachment Variables
Set Outapp = CreateObject("Outlook.Application")
Set Outmail = Outapp.createitem(0)
Timetable = Sheets("sheet1").Range("C2").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
Strbody = "body text."

On Error Resume Next
With Outmail

    'Send email
    .To = ""
    .bcc = ""
    .Subject = "Report" & " " & Format$(Date, "dd-mm-yyyy")
    .body = Strbody & Timetable

    On Error Resume Next
    .Display
End With

On Error GoTo 0
Set Outmail = Nothing
Set Outapp = Nothing

End Sub

1 个答案:

答案 0 :(得分:0)

你不能按照你尝试的方式做到这一点......让我们看看为什么不这样做:)

您已将Timetable声明为String类型变量。在此声明中,您将其值分配为.Select方法的返回值(如果没有错误,将返回值True)。

Timetable = Sheets("sheet1").Range("C2").Select

因此,您绝不会表的Range对象附加到字符串中,在此语句中 p>

.body = Strbody & Timetable

相反,您确实需要将表格转换为HTML或将范围直接从Excel复制并粘贴到Word。

  1. 使用Ron de Bruin的函数将表格转换为HTML PublishObject并将其插入电子邮件,或者
  2. .Display MailItem,然后获取MailItem的.Inspector对象(实际上只是一个Word文档)的句柄
  3. 对于解决方案1,请调整已经给出的答案:

    Paste specific excel range in outlook

    对于解决方案2,您需要使用此处概述的方法来获取Inspector(Word文档代表电子邮件项目):

    https://msdn.microsoft.com/en-us/library/office/ff868098.aspx

    然后,Dim TimeTable as Range,并将代码更改为:

    Set Timetable = Sheets("sheet1").Range("C2").End(xlToRight).End(xlDown)
    

    然后,复制表格:

    Timetable.Copy
    

    然后,在检查器上有句柄后,按照上面的MSDN链接,在Outlook(Word)中获取目标范围,并且可以使用PasteAndFormat对象的Word.Range方法:

    Dim wdRange as Object 'Word.Range
    OutMail.Display
    
    Set wdRange = OutMail.getInspector().WordEditor.Range
    wdRange.Text = strBody
    wdRange.Expand (1)
    wdRange.Characters.Last.PasteAndFormat 16  'wdFormatOriginalFormatting
    

    选项2将是我的首选方法。我在一台没有前景的电脑上,所以我从记忆中略微提出这一点,我现在无法测试,但如果你有任何问题只是发表评论,我会在早上尝试提供更多帮助。