使用 VBA Excel 浏览文件夹以在 Outlook 邮件中附加文件 [重复]

Posted

技术标签:

【中文标题】使用 VBA Excel 浏览文件夹以在 Outlook 邮件中附加文件 [重复]【英文标题】:Browse folders to attach files in Outlook mail using VBA Excel [duplicate] 【发布时间】:2022-01-12 08:31:57 【问题描述】:

我正在开发一个 VBA Excel 中的用户表单,它允许用户提交他们的请求。用户填写表格,然后单击发送按钮。将打开 Outlook 邮件并自动附加完整的表单。

用户通常拥有与请求相关的数据或/和文档。我想向我的用户表单添加功能,允许他们浏览他们的 PC 并导入文件。当他们单击“发送”按钮时,这些文件将附加到与原始 Excel 表单相同的邮件中。

下面是我的发送按钮的代码。

Function CreationMail(criticité As String)
    Dim xFile As String
    Dim xFormat As Long
    Dim Wb As Workbook
    Dim Wb2 As Workbook
    Dim FilePath As String
    Dim FileName As String
    Dim OutlookApp As Object
    Dim OutlookMail As Object
    Dim rng As Range
    
    Set Sheet1 = ThisWorkbook.Sheets("Formulaire")
    Set rng = Sheets("Formulaire").Range("C6:D11").SpecialCells(xlCellTypeVisible)
            
    Application.ScreenUpdating = False
    Set Wb = Application.ActiveWorkbook
    ActiveSheet.Copy
    Set Wb2 = Application.ActiveWorkbook
    Select Case Wb.FileFormat
    Case xlOpenXMLWorkbook:
    xFile = ".xlsx"
    xFormat = xlOpenXMLWorkbook
    Case xlOpenXMLWorkbookMacroEnabled:
    If Wb2.HasVBProject Then
        xFile = ".xlsm"
        xFormat = xlOpenXMLWorkbookMacroEnabled
        Else
        xFile = ".xlsx"
        xFormat = xlOpenXMLWorkbook
    End If
    Case Excel8:
        xFile = ".xls"
        xFormat = Excel8
    Case xlExcel12:
        xFile = ".xlsb"
        xFormat = xlExcel12
    End Select
    FilePath = Environ$("temp") & "\"
    FileName = "STATSAE" & "_" & Format(Now, "yymmdd") & "_" & Format(Now, "hhnnss")

    Set OutlookApp = CreateObject("Outlook.Application")
    Set OutlookMail = OutlookApp.CreateItem(0)
    Wb2.SaveAs FilePath & FileName & xFile, FileFormat:=xFormat
            
    With OutlookMail
        .To = ";" & ";"
        .CC = ""
        If criticité = "Haute" Then
            .Importance = olImportanceHigh
        End If
        If criticité = "" Then
            .Importance = olImportanceNormal
        End If
        If criticité = "Faible" Then
            .Importance = olImportanceNormal
        End If
        .Subject = "Request" & Space(1) & FileName
        .Attachments.Add Wb2.FullName
        .Body = "Please find the requested information" & vbCrLf & "Best Regards"
        .htmlBody = RangetoHTML(rng)
        .Display
    End With
            
    Wb2.Close
    Kill FilePath & FileName & xFile
    Set OutlookMail = Nothing
    Set OutlookApp = Nothing
    Application.ScreenUpdating = True

End Function

【问题讨论】:

这能回答你的问题吗? How to add an attachment to an email using VBA in Excel 您可能想要使用Application.filedialog(msoFileDialogFilePicker) 来获取完整的文件名,请参阅here 和here 【参考方案1】:

首先,您需要对表单进行自定义以获取需要附加到电子邮件的文件。然后在代码中,您可以为用户选择的每个条目重复Attachments 类的Add 方法。附件的来源可以是文件(由带有文件名的完整文件系统路径表示)或构成附件的 Outlook 项目。

.Attachments.Add Wb2.FullName
.Attachments.Add your_chosen_file

【讨论】:

以上是关于使用 VBA Excel 浏览文件夹以在 Outlook 邮件中附加文件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

从excel vba发送outlook邮件

Excel VBA - 组合宏以重命名工作表和宏以在一个宏中合并工作表

访问 VBA 以在不提示的情况下覆盖文件

Excel VBA - 搜索范围和连接的 SQL ADODB 记录集以在列中匹配写入结果集

Excel VBA - 使用 Dir() 的多个实例?

如何格式化 HTML 文件以在 Excel 中获取定义的名称(从 Web 浏览器复制粘贴)?