如何将多个文件附加到循环中的消息?
How to attach multiple files to a message in a loop?
我正在尝试循环将多个文件附加到邮件中。下面的代码应该执行以下操作:
- 打开文件select或
- 我会选择一个或多个文件
- 文件将通过电子邮件发送到我的电子表格中指定的地址
我能够选择一个文件并将其作为附件发送电子邮件。
当我 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
我正在尝试循环将多个文件附加到邮件中。下面的代码应该执行以下操作:
- 打开文件select或
- 我会选择一个或多个文件
- 文件将通过电子邮件发送到我的电子表格中指定的地址
我能够选择一个文件并将其作为附件发送电子邮件。
当我 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