vba - 通过电子邮件发送拆分工作簿的每个新工作簿

标签 vba excel email outlook

我有根据条件拆分工作簿的代码。我想将这些新工作簿中的每一个通过电子邮件发送给不同的人。

当我运行宏时,它会拆分工作簿并将所有工作表放在我想要的位置。当我尝试发送时,我只发送 1 封电子邮件。

Sub savesheetsSend()

Dim ws As Worksheet
Dim Filetype As String
Dim Filenum As Long
Dim wb As Workbook
Dim FolderName As String
Dim open_book As Workbook
Set outmail = CreateObject("outlook.application")
Set outmsg = outmail.createitem(0)

Set wb = Application.ThisWorkbook

'create directory to save each sheet in
FolderName = "C:\Users\jpenn\Desktop" & "\" & wb.Name
MkDir FolderName

On Error Resume Next

'save each sheet as workbook in directory
For Each ws In wb.Worksheets

    If ws.Range("A1") = 1 Then
        Filetype = ".xlsm": Filenum = 52
        ws.Copy
        xFile = FolderName & "\" & Application.ActiveWorkbook.Sheets(1).Name & Filetype
        Application.ActiveWorkbook.SaveAs xFile, FileFormat:=Filenum
    End If
Next

'send all new workbooks to email address in CELL("B1")
For Each open_book In Application.Workbooks
    If open_book.Name <> ThisWorkbook.Name Then

        With outmsg
            .Subject = ActiveWorkbook.Name & " payroll data"
            .To = ActiveWorkbook.ActiveSheet.Range("b1").Value
            .body = "I will get to this later"
            .Attachments.Add Application.ActiveWorkbook.FullName
            .send
        End With
    open_book.Close
    End If
Next

End Sub

最佳答案

以这种方式尝试...已测试

Option Explicit
Sub savesheetsSend()
    Dim Ws As Worksheet
    Dim Filetype As String
    Dim xFile As String
    Dim Filenum As Long
    Dim Wb As Workbook
    Dim FolderName As String
    Dim Open_Book As Workbook
    Dim OutMsg As Object
    Dim OutMail As Object

    Set OutMail = CreateObject("outlook.application")
    Set Wb = Application.ThisWorkbook

    'create directory to save each sheet in
    FolderName = "C:\Users\jpenn\Desktop" & "\" & Wb.Name
    MkDir FolderName

    'save each sheet as workbook in directory
    For Each Ws In Wb.Worksheets

        If Ws.Range("A1") = 1 Then
            Filetype = ".xlsm": Filenum = 52
            Ws.Copy
            xFile = FolderName & "\" & Application.ActiveWorkbook.Sheets(1).Name & Filetype
            Application.ActiveWorkbook.SaveAs xFile, FileFormat:=Filenum

            Set OutMsg = OutMail.createitem(0)

            With OutMsg
                .Subject = Ws.Name & " payroll data"
                .To = ActiveSheet.Range("b1").Value
                .Body = "I will get to this later"
                .Attachments.Add (xFile)
                .Display
            End With

            ActiveWorkbook.Close

        End If
    Next
End Sub

关于vba - 通过电子邮件发送拆分工作簿的每个新工作簿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39186740/

相关文章:

ms-access - 将Excel文件导入Access表运行时错误 '-2147352565 (8002000b)'

linux - 从 crontab 发送邮件时,电子邮件正文内容被删除

excel - 如何让我的各个模块协同工作?

vba - 在不使用剪贴板的情况下将注释从一个工作表转移到另一个工作表

vba - 如何使用 SHDocVw.InternetExplorer 命令最大化由 VBA 创建的 IE 窗口?

excel - 在彩色文本后添加一个空格

python - 在 Python 中打开 excel 文件时出现错误

excel - 某些工作表上出现运行时错误 '1004' : Method 'Range' of object 'Global' failed,,但我的代码能够在大多数其他工作表上运行?

iphone - 仅在 iPhone 上出现的电子邮件通讯中的奇怪差距

iOS:如何在已经显示邮件撰写 View 时在后台创建/准备自定义电子邮件附件?