You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Excel VBA批量发送的邮件添加默认签名?

解决Excel VBA批量邮件中自动填充默认Outlook签名的问题

你的代码里直接引用Signature变量但未定义,而且Outlook的默认签名不会在创建邮件实例时自动加载,必须先调用.Display方法触发邮件显示,才能获取到签名内容。以下是修正后的代码:

Sub send_mass_email()
    Dim i As Integer
    Dim Greeting, email, body, subject, business, Website As String
    Dim OutApp As Object
    Dim OutMail As Object
    Dim signature As String ' 定义签名变量
    
    body = ActiveSheet.TextBoxes("TextBox 1").Text
    
    i = 2
    
    ' 只创建一次Outlook实例,避免重复创建影响性能
    Set OutApp = CreateObject("Outlook.Application")
    
    Do While Cells(i, 1).Value <> ""
        
        Greeting = Cells(i, 2).Value
        email = Cells(i, 3).Value
        body = ActiveSheet.TextBoxes("TextBox 1").Text
        subject = Cells(i, 4).Value
        business = Cells(i, 1).Value
        Website = Cells(i, 5).Value
        
        ' 替换占位符
        body = Replace(body, "B2", Greeting)
        body = Replace(body, "A2", business)
        body = Replace(body, "E2", Website)
    
        Set OutMail = OutApp.CreateItem(0)
        With OutMail
            .To = email
            .Subject = subject
            
            ' 先显示邮件,触发Outlook加载默认签名
            .Display
            ' 获取当前邮件的签名内容(纯文本格式)
            signature = .Body
            ' 将自定义正文与签名拼接,添加换行保证格式整洁
            .Body = body & vbCrLf & vbCrLf & signature
            
            '.Attachments.Add ("") ' 可在此添加附件
            '.Send ' 取消注释直接发送,否则保持显示状态
        End With
        
        ' 重置正文文本
        body = ActiveSheet.TextBoxes("TextBox 1").Text
        
        i = i + 1
    Loop
    
    Set OutMail = Nothing
    Set OutApp = Nothing
    MsgBox "邮件已生成/发送!"
    
End Sub

关键改动说明:

  • 新增signature变量用于存储签名内容
  • 将OutApp的创建移到循环外,避免重复创建Outlook实例,提升性能
  • 先调用.Display触发签名加载,再获取签名内容
  • 用vbCrLf添加换行,保证自定义正文和签名之间的格式分隔清晰

如果你的默认签名是HTML格式(包含图片、样式),需要改用.HTMLBody处理,代码调整如下:

With OutMail
    .To = email
    .Subject = subject
    
    .Display
    ' 获取HTML格式的签名
    signature = .HTMLBody
    ' 将自定义正文转为HTML格式并与签名拼接
    .HTMLBody = "<p>" & Replace(body, vbCrLf, "<br>") & "</p><br>" & signature
End With

内容的提问来源于stack exchange,提问作者Adam Humphries

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:37:45