excel 向单元格范围内的电子邮件地址发送电子邮件

ezykj2lf  于 2023-01-27  发布在  其他
关注(0)|答案(2)|浏览(204)

我试图从Excel发送电子邮件,它使用保存在A2数据表中的透视表范围发送附件,并且每天都是动态的。
.TO字段中,我收到错误
对象不支持此方法。

Sub emailtest()

Dim objOutlook As Object
Dim objMail As Object
Dim rngTo As String
Dim rngSubject As String
Dim rngBody As String
Dim LastRow As Long
Set objOutlook = CreateObject("Outlook.Application")
Set objMail = objOutlook.CreateItem(0)

Sheets("Data").Select
LastRow = Worksheets("Data").Range("A" & Rows.Count).End(xlUp).Row

With objMail
.To = Worksheets("Data").Range("A2: A" & LastRow - 1)
.Subject = "Sell Fail Trade"
.Body = "Please find today's sell report"
.Attachments.Add "C\Temp Folder"
.Display 'Instead of .Display, you can use .Send to send the email _
            or .Save to save a copy in the drafts folder
End With
Set objOutlook = Nothing
Set objMail = Nothing
End Sub
hgncfbus

hgncfbus1#

To-属性要求使用单个字符串作为参数。如果有多个人应接收邮件,则需要使用;连接这些名称
如果LastRow-1大于3,则区域中有多个单元格,Worksheets("Data").Range("A2: A" & LastRow - 1)将为您提供一个二维数组,是的,它是二维的,即使它只包含一列。
VBA中有一个很好的函数join,它可以连接数组的内容,但在本例中,它不能使用,因为它只适用于一维数组。
To你必须手动遍历这个范围来创建to-string,我建议创建一个简单的,可重用的函数(例如,也可以用于cc字段)。

Function join2D(a As Variant, Optional delimiter As String = ";") As String
    ' Check if a is a single value
    If (VarType(a) And vbArray) = 0 Then
        join2D = a
        Exit Function
    End If
    
    Dim i As Long, j As Long
    For i = LBound(a, 1) To UBound(a, 1)
        For j = LBound(a, 2) To UBound(a, 2)
            Dim v
            v = a(i, j)
            If Not IsEmpty(v) And Not IsError(v) Then
                join2D = join2D & IIf(join2D = "", "", delimiter) & CStr(v)
            End If
        Next j
    Next i
End Function

然后在创建邮件的例程中写入:

.To = Join2D(Worksheets("Data").Range("A2: A" & LastRow - 1))
kb5ga3dv

kb5ga3dv2#

To属性是一个字符串属性。它是Outlook项目的收件人显示名称的字符串列表,以分号分隔。因此,您需要从Excel中的Range对象提取字符串。例如,您可以尝试使用Range.Value属性,该属性返回或设置一个变量值,该值表示指定范围的值。

.To = Worksheets("Data").Range("A2: A" & LastRow - 1).Value

.To = Worksheets("Data").Range("A2: A" & LastRow - 1).Value2

如果目标范围是多维的(或由多个单元格组成),则需要基于通过每个单元格的范围值构建To字符串,然后才将其分配给To属性。

相关问题