2016-11-08 110 views
0

我使用这个宏发送工作簿作为附件(Book1.xlsx)通过电子邮件发送选择从Excel作为附件

Sub Macro2_SendByEMail() 

' Copy the sheet(1) 
ThisWorkbook.Sheets(1).Copy 

' Send Email 
With ActiveWorkbook 
.SendMail Recipients:=Array("[email protected]", "[email protected]"), Subject:="Addresses [" & Format(Date, "dd/mm/yy") & "]" 
.Close SaveChanges:=False 
End With 

End Sub 

但我不能找出如何修改代码,使我只发工作簿的前三列 ...

感谢您的帮助!

+0

认为您需要使用电子邮件库,大概是Outlook,并构建邮件的'.Body'。 –

回答

0

你可以试试这个:

Option Explicit 

Sub Macro2_SendByEMail() 

' Copy the sheet(1) 
    Dim my_range As Range 
    Dim l_row  As Long 

    l_row = ThisWorkbook.Sheets(1).UsedRange.Rows.Count 
    With ThisWorkbook.Sheets(1) 
     Set my_range = .Range(.Cells(1, 1), .Cells(l_row, 3)) 
    End With 

    my_range.Copy 

    ' Send Email 
    With ActiveWorkbook 
    .SendMail Recipients:=Array("[email protected]", "[email protected]"), Subject:="Addresses [" & Format(Date, "dd/mm/yy") & "]" 
    .Close SaveChanges:=False 
    End With 

End Sub 

的想法是,你把使用范围的最后一行中的第一张,并在此基础上,你定义选择复制。

+0

不幸的是,这不起作用。我认为问题出在'发送电子邮件部分,仍然存在'使用ActiveWorkbook',因为它可能应该是类似于“使用ActiveSelection”另外我不介意该范围是否是整个3列... – teaspoon

+1

[ 'SendMail'](https://msdn.microsoft.com/en-us/library/office/ff821053.aspx)是一个Workbook对象方法,它使用已安装的邮件系统_发送工作簿。所以你只能用它来发送整个工作簿。否则,你将不得不使用Outlook对象模型 – user3598756

+0

可能是,我只是做了一个vba代码,选择了前3列,没有照顾其余的,因为我没有在这里设置前景。 – Vityata

相关问题