VBA按excel内容和模板批量发邮件

VBA按excel内容和模板通过outlook批量发邮件

前言:

建立包含vba的excel

  1. 打开Excel工作簿,其中包含您的VBA代码。
  2. 按下ALT + F11键打开Visual Basic for Applications(VBA)编辑器。
  3. 在VBA编辑器中,找到您的Excel工作簿的项目资源管理器窗格。如果看不到该窗格,请按下CTRL + R键显示它。
  4. 双击项目资源管理器窗格中的"Sheet1"(或包含收件人列表的工作表名称),以打开该工作表的代码窗口。
  5. 在代码窗口中,将上述示例代码粘贴到空白区域中。
  6. 确保在代码窗口中选择了正确的过程(Sub)名称,即"SendBulkEmails"。
  7. 按下F5键或点击工具栏上的"运行"按钮来执行代码。
  8. Outlook将自动打开并开始批量发送邮件。
Sub SendBulkEmails()
Dim outlookApp As Object
Dim myMail As Object
Dim sh As Worksheet
Dim cell, Filecell, rng As Range
Dim source_file, to_emails, cc_emails As String
Dim i, j As Integer
Dim xOutMsg As String

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

Set outlookApp = CreateObject("Outlook.application")
'Set myMail = outlookApp.CreateItem(0)
Set sh = Sheets("sheet1")


For Each cell In sh.Columns("A").Cells.SpecialCells(xlCellTypeConstants)
    Set rng = sh.Cells(cell.Row, 1).Range("F1:M1")
    
    If cell.Value Like "?*@?*.?*" And _
    Application.WorksheetFunction.CountA(rng) > 0 Then
        Set myMail = outlookApp.CreateItemFromTemplate(sh.Cells(cell.Row, 5).Value)
        
        With myMail
            .Display '此处Display是为了添加default Outlook签名
            .To = sh.Cells(cell.Row, 1).Value
            .CC = sh.Cells(cell.Row, 2).Value
            .Subject = sh.Cells(cell.Row, 4).Value
            '修改邮件模板中的变量
            .HTMLBody = Replace(.HTMLBody, "[变量1]", "替换内容1")
            .HTMLBody = Replace(.HTMLBody, "[变量2]", "替换内容2")
            ' 可以根据需要修改更多变量
            'Signature = .HTMLBody & Signature '如果不添加签名可以用'注释掉这行
            
            '添加附件
            For Each Filecell In rng.SpecialCells(xlCellTypeConstants)
                
                If Trim(Filecell.Value) <> "" Then
                    If Dir(Filecell.Value) <> "" Then
                        .Attachments.Add Filecell.Value
                    End If
                End If
            Next Filecell
            '.send '正式发送可以将 ' 去掉
            .Display '预览效果
        End With
        
        Set myMail = Nothing
    End If
Next cell

Set outlookApp = Nothing

With Application
    .EnableEvents = True
    .ScreenUpdating = True
End With

End Sub

Excel填写说明

  1. A1:Receiver Address 接收人
  2. B1:CC Address 抄送
  3. C1:Subject 主题
  4. D1:Tamplate 邮件模板
  5. E1-M1:Attachment 附件地址(F列到N列可以填写附件地址,如果需要拓展要改这个代码-》Range(“F1:N1”))

可能出现的问题

编译错误

如果您在VBA编辑器中看到了"Sub SendBulkEmails()行编译错误"的错误消息,可能是由于以下原因之一:

  1. 缺少对Outlook对象库的引用:请确保您已经正确引用了Outlook对象库。在VBA编辑器中,点击菜单栏上的"工具",然后选择"引用"。在弹出的对话框中,找到并选中"Microsoft Outlook xx.x Object Library"(其中xx.x表示Outlook版本号),然后点击"确定"按钮。

  2. Outlook对象库版本不匹配:如果您的Outlook应用程序与您所引用的Outlook对象库的版本不匹配,也可能导致编译错误。请确保您的Outlook应用程序与您所引用的Outlook对象库版本相匹配。

  • 以下是一些常见的Office版本和对应的Outlook库版本:

    Office 2019:Outlook 16.0库
    Office 2016:Outlook 16.0库
    Office 2013:Outlook 15.0库
    Office 2010:Outlook 14.0库

工具-引用为灰色

如果在VBA编辑器中,"工具"菜单下的"引用"选项是灰色的,那么可能有以下几种原因:

项目没有打开:请确保您已经打开了一个VBA项目。如果没有打开任何项目,"引用"选项将会被禁用。您可以通过打开一个Excel、Word或其他支持VBA的应用程序,并按下Alt+F11键来打开VBA编辑器。

VBA编辑器处于设计模式:如果VBA编辑器当前处于设计模式(例如,正在编辑用户窗体或类模块),则"引用"选项将被禁用。请尝试切换到标准模块(如模块1)以启用"引用"选项。

缺少管理员权限:如果您没有足够的管理员权限,可能无法更改VBA项目的引用设置。请确保您具有适当的权限。

如果上述解决方法都不起作用,请尝试重新安装Microsoft Office套件,并确保选择了完整安装选项。这样可以确保所有必需的文件和库正确安装并注册。

创建 Outlook 对象时未定义用户定义类型

参考文章中的代码这两行会报用户定义类型错误

Dim outlookApp As Outlook.Application
Dim myMail As Outlook.MailItem

所以我参考文章2将其定义改为了上面代码的形式。

参考:

  1. Outlook 群发邮件并添加不同附件 -VBA
  2. excel - 创建 Outlook 对象时未定义用户定义类型
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 对于使用Excel VBA批量打印出货单据,可以通过以下步骤实现: 1. 首先,将所有需要打印的出货单据数据整理在一个Excel工作簿中的一个或多个工作表中。每个工作表代表一个出货单据。 2. 在VBA编辑器中打开该工作簿,然后创建一个新的模块。 3. 在模块中编写VBA代码来批量打印出货单据。 4. 首先,编写一个循环来遍历所有需要打印的工作表。可以使用For Each循环来实现。例如: ``` Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets ' 这里可以添加打印出货单据的代码 Next ws ``` 5. 在循环中,添加打印出货单据的代码。例如,可以使用ws.PrintOut方法来直接打印当前工作表。 ``` ws.PrintOut ``` 这将打印当前工作表。 6. 可以根据需要,设置打印参数,如打印份数、页面设置等等。例如,可以使用PageSetup属性来设置页面方向和大小等。 ``` With ws.PageSetup .Orientation = xlLandscape .PrintArea = ws.UsedRange.Address ' 设置其他打印参数 End With ``` 以上是一个简单的示例代码,可以根据实际需要进行修改和扩展。 7. 运行VBA代码,即可批量打印出货单据。 总结起来,使用Excel VBA批量打印出货单据,需要遍历所有需要打印的工作表,并设置好打印参数,然后使用PrintOut方法来实现打印。通过以上步骤,可以方便地实现批量打印出货单据。 ### 回答2: Excel VBA可以用于批量打印出货单据。下面是一个大致的步骤和示例代码: 1. 首先,需要在Excel中创建一个出货单据模板。该模板应包括出货单据的所有必要信息,如订单号、客户名称、出货日期等。 2. 接下来,使用VBA代码打开模板文件,并将相应的数据填充到模板中。可以从其他Excel文件或数据库中获取这些数据。 3. 在填充完数据后,可以使用PrintOut方法来批量打印出货单据。可以通过循环遍历数据源,逐个打印出货单据。 以下是一个示例代码,用于批量打印出货单据: ```vba Sub 批量打印出货单据() Dim 数据源 As Range Dim 单元格 As Range Dim 模板文件 As Workbook Dim 目标文件 As Workbook ' 打开模板文件 Set 模板文件 = Workbooks.Open("模板文件路径") ' 获取数据源范围 Set 数据源 = Sheets("数据源").Range("A2:C10") ' 循环遍历数据源,逐个打印出货单据 For Each 单元格 In 数据源 ' 将数据填充到模板中 With 模板文件 .Sheets("出货单据").Range("A1").Value = 单元格.Value '假设订单号在A列 .Sheets("出货单据").Range("B1").Value = 单元格.Offset(0, 1).Value '假设客户名称在B列 .Sheets("出货单据").Range("C1").Value = 单元格.Offset(0, 2).Value '假设出货日期在C列 End With ' 打印出货单据 模板文件.PrintOut ' 关闭目标文件,以便下次打开 模板文件.Close SaveChanges:=False Set 模板文件 = Workbooks.Open("模板文件路径") Next 单元格 ' 关闭模板文件 模板文件.Close SaveChanges:=False End Sub ``` 需要注意的是,在上述代码中,需要根据实际情况修改模板文件的路径、数据源的范围以及模板中数据的填充位置。此外,还需要确保在打印之前已经安装了正确的打印机,并且打印机设置正确。 ### 回答3: 在Excel VBA批量打印出货单据,可以通过以下步骤实现: 1. 首先,在Excel中创建一个包含出货信息的工作表,每行代表一张出货单据,列代表不同的出货信息,如日期、出货单号、货物名称等。 2. 打开VBA编辑器,在工作表所在的项目中插入一个新的模块。 3. 在模块中编写VBA代码,可以使用循环结构和条件语句来逐行读取出货信息并进行打印。首先使用`LastRow = Cells(Rows.Count, 1).End(xlUp).Row`语句来获取工作表中最后一行的行号。 4. 使用循环语句,从第二行开始遍历到最后一行,依次读取每一行的出货信息。 5. 利用条件语句判断是否满足打印条件,如果满足,则执行打印操作。可以使用`ActiveSheet.PrintOut`来打印当前工作表。 6. 在每次循环结束后,将行号递增,以读取下一行的出货信息。 7. 完成循环后,关闭VBA编辑器。 8. 在Excel中按下快捷键"Alt + F8",选择刚刚编写的VBA宏并运行。 以上步骤可以实现批量打印出货单据的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值