我正在升级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
答案 0 :(得分:0)
你不能按照你尝试的方式做到这一点......让我们看看为什么不这样做:)
您已将Timetable
声明为String类型变量。在此声明中,您将其值分配为.Select
方法的返回值(如果没有错误,将返回值True
)。
Timetable = Sheets("sheet1").Range("C2").Select
因此,您绝不会将表的 相反,您确实需要将表格转换为HTML或将范围直接从Excel复制并粘贴到Word。 对于解决方案1,请调整已经给出的答案: Paste specific excel range in outlook 对于解决方案2,您需要使用此处概述的方法来获取Inspector(Word文档代表电子邮件项目): https://msdn.microsoft.com/en-us/library/office/ff868098.aspx 然后, 然后,复制表格: 然后,在检查器上有句柄后,按照上面的MSDN链接,在Outlook(Word)中获取目标范围,并且可以使用 选项2将是我的首选方法。我在一台没有前景的电脑上,所以我从记忆中略微提出这一点,我现在无法测试,但如果你有任何问题只是发表评论,我会在早上尝试提供更多帮助。Range
对象附加到字符串中,在此语句中> p>
.body = Strbody & Timetable
.Display
MailItem,然后获取MailItem的.Inspector
对象(实际上只是一个Word文档)的句柄Dim TimeTable as Range
,并将代码更改为:Set Timetable = Sheets("sheet1").Range("C2").End(xlToRight).End(xlDown)
Timetable.Copy
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