【问题标题】:Email a single attachment from folder of files each to a different person将文件文件夹中的单个附件通过电子邮件发送给不同的人
【发布时间】:2016-07-07 20:55:36
【问题描述】:

我有一个包含 50 个文件的文件夹和一个包含 50 个电子邮件地址的列表。每个文件都发送到不同的电子邮件地址。有没有办法编写一个宏来执行这个任务?

下面这组代码的问题有两个: 1) 我在 Excel 文件中有 3 列数据:一列用于主题,一列用于发送到的电子邮件地址,第三列用于存储附件的文件路径。

下面的代码不允许预先确定的主题参数集。它还使用ROWS??对于文件路径字段,而不是像发送到那样的列?好混乱。

Sub Send_Files()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim sh As Worksheet
    Dim cell As Range
    Dim FileCell As Range
    Dim rng As Range

    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With

    Set sh = Sheets("Sheet1")

    Set OutApp = CreateObject("Outlook.Application")

    For Each cell In sh.Columns("B").Cells.SpecialCells(xlCellTypeConstants)

        'Enter the path/file names in the C:Z column in each row
        Set rng = sh.Cells(cell.Row, 1).Range("C1:Z1")

        If cell.Value Like "?*@?*.?*" And _
           Application.WorksheetFunction.CountA(rng) > 0 Then
            Set OutMail = OutApp.CreateItem(0)

            With OutMail
                .to = cell.Value
                .Subject = "Testfile"
                .Body = "Hi " & cell.Offset(0, -1).Value

                For Each FileCell In rng.SpecialCells(xlCellTypeConstants)
                    If Trim(FileCell) <> "" Then
                        If Dir(FileCell.Value) <> "" Then
                            .Attachments.Add FileCell.Value
                        End If
                    End If
                Next FileCell

                .Send  'Or use .Display
            End With

            Set OutMail = Nothing
        End If
    Next cell

    Set OutApp = Nothing
    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub

【问题讨论】:

    标签: excel vba outlook


    【解决方案1】:

    这是一个简单的例子,假设 col A = Email, Col B = Subject &amp; Col C = Path

    Option Explicit
    Public Sub Example()
       Dim olApp As Object
       Dim olMail As Object
       Dim olRecip As Object
       Dim olAtmt As Object
       Dim iRow As Long
       Dim Recip As String
       Dim Subject As String
       Dim Atmt As String
    
       iRow = 2
    
       Set olApp = CreateObject("Outlook.Application")
    
       Dim Sht As Worksheet
       Set Sht = ThisWorkbook.Worksheets("Sheet1")
    
       Do Until IsEmpty(Sht.Cells(iRow, 1))
    
          Recip = Sht.Cells(iRow, 1).Value
          Subject = Sht.Cells(iRow, 2).Value
          Atmt = Sht.Cells(iRow, 3).Value ' Attachment Path
    
          Set olMail = olApp.CreateItem(0)
    
          With olMail
             Set olRecip = .Recipients.Add(Recip)
            .Subject = Subject
            .Body = "Hi "
            .Display
             Set olAtmt = .Attachments.Add(Atmt)
             olRecip.Resolve
          End With
    
          iRow = iRow + 1
    
       Loop
    
       Set olApp = Nothing
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-16
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      • 2015-12-21
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      相关资源
      最近更新 更多