如何将多个文件附加到循环中的消息?

How to attach multiple files to a message in a loop?

我正在尝试循环将多个文件附加到邮件中。下面的代码应该执行以下操作:

我能够选择一个文件并将其作为附件发送电子邮件。
当我 select 两个或更多文件时,代码在以下部分停止:

For fichier1 = LBound(fichier1) To UBound(fichier1)
    MonMessage.Attachments.Add fichier1
Next fichier1

注意:我没有使用 Outlook 对象的引用,因为另一个宏停止工作。

完整代码

Sub Send_Email()

Dim Fichier As Variant
Dim A       As Integer
Dim MaMessagerie As Object
Dim MonMessage As Object
Set MaMessagerie = CreateObject("Outlook.application")
Set MonMessage = MaMessagerie.CreateItem(0)

fichier1 = Application.GetOpenFilename("File to send (*.XLS*), *.XLS*", _
               Title:="Pick at least One file", _
               MultiSelect:=True)

If Not IsArray(fichier1) Then
    If fichier1 = "" Or fichier1 = False Then
        MsgBox "No file selected!", vbExclamation, "Atention"
        Application.ScreenUpdating = True
        Exit Sub
    End If
End If

MonMessage.To = "myEmail@321.com"
MonMessage.CC = ""

'loop to Attach 1 or more files
For fichier1 = LBound(fichier1) To UBound(fichier1)
    MonMessage.Attachments.Add fichier1
Next fichier1

MonMessage.Subject = "Subject"

MonMessage.Body = "test"
MonMessage.Display
'MonMessage.Send

Set MaMessagerie = Nothing

'MsgBox "Email sent"

End Sub

来自关于 For...Next 语句的 Microsoft 文档 正确的语法是:

For counter = start To end

其中 计数器 是一个有效的数值变量。

一个基本的例子是:

For i = 1 to 5

在您的代码中,您将计数器作为一个对象,这就是它导致错误的原因。如果您想使用一个对象进行迭代,您可以尝试使用 For Each...Next 语句。

语法是:

For Each element In group

一个基本的例子是

Dim oItem as Variant
For Each oItem in oCollection

或我最喜欢的用途之一:

Dim Cell as Range
For Each Cell in Range("A1:A4").Cells

在您的代码中,您需要更改 element 使其成为一个单独的变量,因为您具有与 element[=40= 相同的对象]和.

我建议如下:

Dim oFile as Variant
For Each oFile in fichier1

MonMessage.Attachments.Add oFile

Next oFile

您永远不会在代码中声明 fichier1

在下面声明它并添加了一个新变量,idx,可以在遍历所选文件数组时使用。

Option Explicit

Sub SendMultiAttachmebts()
Dim Fichier1 As Variant
Dim MaMessagerie As Object
Dim MonMessage As Object
Dim idx As Long

    Set MaMessagerie = CreateObject("Outlook.application")
    Set MonMessage = MaMessagerie.CreateItem(0)

    Fichier1 = Application.GetOpenFilename("File to send (*.XLS*), *.XLS*", _
                                           Title:="Pick at least One file", _
                                           MultiSelect:=True)

    If Not IsArray(Fichier1) Then
        If Fichier1 = "" Or Fichier1 = False Then
            MsgBox "No file selected!", vbExclamation, "Atention"
            Application.ScreenUpdating = True
            Exit Sub
        End If
    End If

    MonMessage.To = "myEmail@321.com"
    MonMessage.CC = ""

    'loop to Attach 1 or more files
    For idx = LBound(Fichier1) To UBound(Fichier1)

        MonMessage.Attachments.Add Fichier1(idx)

    Next idx

    MonMessage.Subject = "Subject"
    MonMessage.Body = "test"
    MonMessage.Display
    'MonMessage.Send

    Set MaMessagerie = Nothing

    'MsgBox "Email sent"

End Sub