如何从Excel单元格读取文件路径动态添加邮件附件并解决438报错
报错原因
- 你在完整代码中写的
"ruta" & j - 5是拼接生成了形如ruta1的字符串,并不是你预先定义的ruta1变量,VBA不支持直接通过拼接字符串的方式调用变量,因此传入Attachments.Add方法的参数不是合法的文件路径,触发对象不支持属性/方法的报错。 - 不需要单独声明
ruta1到ruta5的变量存储路径,直接读取对应单元格的内容即可适配不确定数量的附件需求。
修正后的代码
Sub envioCorreo() Dim ulfila As Integer Dim correo As Object Dim attachRng As Range, rng As Range ' 确定要读取附件路径的范围(N列从第6行开始到最后非空行) Set attachRng = Range("N6:N" & Range("N" & Rows.Count).End(xlUp).Row) ulfila = Range("A" & Rows.Count).End(xlUp).Row For i = 2 To ulfila Set correo = CreateObject("Outlook.Application").CreateItem(0) With correo .To = Range("F" & i).Value .Subject = Clientes.Range("K2").Value .Body = Range("k6").Value & " " & Range("D" & i).Value & "." & vbNewLine & Clientes.txt_mensaje ' 遍历所有附件路径单元格,非空就添加为附件 For Each rng In attachRng If Trim(rng.Value) <> "" Then ' 可选判断:文件存在才添加,避免路径无效报错 If Dir(rng.Value) <> "" Then .Attachments.Add rng.Value End If End If Next rng .Send End With Next i Set correo = Nothing MsgBox "Se han enviado " & i - 1 & " 封邮件发送成功" End Sub
额外注意事项
- 建议所有读取单元格值的操作都明确指定所属工作表,比如
ThisWorkbook.Sheets("你的表名").Range("F" & i),避免当前活跃工作表切换时读取错误数据 - 如果不需要文件存在性校验,可以删除对应的判断语句
内容的提问来源于stack exchange,提问作者Luis Ñañez Llanos
相关产品推荐
相关产品推荐

