首页 > 解决方案 > 如何在循环中将多个文件附加到消息中?

问题描述

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

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

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

标签: excelvbaoutlook

解决方案


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

For counter = start To end

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

一个基本的例子是:

For i = 1 to 5

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

语法是:

对于中的每个元素

一个基本的例子是

Dim oItem as Variant
For Each oItem in oCollection

或我最喜欢的用途之一:

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

在您的代码中,您需要更改元素,使其成为一个单独的变量,因为您具有与elementgroup相同的对象。

我会建议类似:

Dim oFile as Variant
For Each oFile in fichier1

MonMessage.Attachments.Add oFile

Next oFile

推荐阅读