VBA 批量发送邮件

1. 布局

2. 代码

前期绑定的话,需要勾选 Microsoft Outlook 16.0 Object Library

Option Explicit

Const SEND_Y As String = "Yes"
Const SEND_N As String = "No"
Const SEND_SELECT_ALL As String = "Select All"
Const SEND_CANCEL_ALL As String = "Cancel All"

Private Sub btnSendMail_Click()
    Dim i, j As Long
    Dim strSub As String
    Dim strBody As String
    Dim strSendFlag As String
    Dim arrFile() As String
    Dim strFile As String
    
    Dim objApp As Object
    Dim objMail As Object
    'Dim objApp As New Outlook.Application
    'Dim objMail As MailItem
    
    Set objApp = CreateObject("Outlook.Application")
    
    
    For i = 4 To Range("B" & Rows.Count).End(xlUp).Row
        strSendFlag = Range("B" & i).Value
        
        If strSendFlag = SEND_Y Then
            Set objMail = objApp.CreateItem(0)
            On Error Resume Next
            With objMail
                .To = Range("C" & i).Value
                .CC = Range("D" & i).Value
                .BCC = Range("E" & i).Value
                .Subject = Range("F" & i).Value
                .HTMLBody = Range("G" & i).Value
                ''''''''''''''''''
                strFile = Range("H" & i).Value
                If strFile <> vbNullString Then
                    arrFile = Split(strFile, vbLf)
                End If
                For j = LBound(arrFile) To UBound(arrFile)
                    .Attachments.Add arrFile(j)
                Next j
                
                
                .Display
                '.Send
            End With
            Set objMail = Nothing
            On Error GoTo 0
        End If
    Next
    
    Set objApp = Nothing
    
    MsgBox "Done."
    
End Sub

Private Sub btnSendFlag_Click()
    Dim i As Long
    Dim strSendFlag As String
    
    Columns("B").ColumnWidth = 10
    
    
    btnSendFlag.Top = Range("B1").Top
    btnSendFlag.Left = Range("B1").Left
    btnSendFlag.Width = Range("B1").Width
    btnSendFlag.Height = Range("B1").Height + Range("B2").Height
    
    
    If btnSendFlag.Caption = SEND_SELECT_ALL Then
        strSendFlag = SEND_Y
        btnSendFlag.Caption = SEND_CANCEL_ALL
    Else
        strSendFlag = SEND_N
        btnSendFlag.Caption = SEND_SELECT_ALL
    End If
   
    For i = 4 To Range("B" & Rows.Count).End(xlUp).Row
        Range("B" & i).Value = strSendFlag
    Next i
    
    
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    If Target.Column = 2 Then
        If Target.Row >= 4 And Target.Row <= Range("B" & Rows.Count).End(xlUp).Row Then
            If Target.Value = SEND_Y Then
                Target.Value = SEND_N
            Else
                Target.Value = SEND_Y
            End If
        End If
    End If
    
End Sub

相关推荐

  1. EXCEL VBA邮件,实现自动化批量发送

    2024-07-11 22:10:02       27 阅读
  2. Golang- 邮件服务,发送邮件

    2024-07-11 22:10:02       39 阅读
  3. VBA 批量处理Excel文件

    2024-07-11 22:10:02       34 阅读
  4. VBA 批量转换xls文件

    2024-07-11 22:10:02       21 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 22:10:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 22:10:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 22:10:02       58 阅读
  4. Python语言-面向对象

    2024-07-11 22:10:02       69 阅读

热门阅读

  1. 洛谷P7537-字典树+DFS

    2024-07-11 22:10:02       19 阅读
  2. SpringBoot使用@RestController处理GET和POST请求

    2024-07-11 22:10:02       19 阅读
  3. python的内置函数和模块(网安)

    2024-07-11 22:10:02       24 阅读
  4. (C++哈希02) 四数相加 赎金信

    2024-07-11 22:10:02       22 阅读
  5. 超详细Python教程——面向对象相关知识

    2024-07-11 22:10:02       16 阅读
  6. 2024前端面试每日一更——简述MVVM?

    2024-07-11 22:10:02       22 阅读
  7. 呼叫中心遭遇UDP攻击,如何快速恢复服务?

    2024-07-11 22:10:02       23 阅读
  8. conda 重命名虚拟环境

    2024-07-11 22:10:02       21 阅读