Envío de correos en Excel
estoy corriendo esta macro para enviar correos con varios archivos adjuntos por yahoo, pero me va añadiendo los archivos de todos los anteriores no me añade solo los suyos sino que van añadiéndose el suyo y los anteriores, no veo el error.
Gracias de antemano.
Sub EnviarVariosMails_CDO()
'llamo a la función creada (que me conecta al servidor). Si devuelve
'false es por que se generaron problemas: aviso y cierro todo
If AbrirConexion = False Then
MsgBox "Se presentaron problemas en la conexion", vbCritical
Set Email = Nothing
End
End If
'almaceno la ultima fila ocupada de la tabla
UltFila = Cells(Cells.Rows.Count, 1).End(xlUp).Row
'llamo a la función para controlar los registros, pasando
'como argumento la ultima fila ocupada de la tabla:
res = RevisarTabla(UltFila)
'si retorna un valor distinto de "ok" es por que algún
'tipo de error encontró:
If res <> "ok" Then
MsgBox res, vbCritical, "Macro cancelada"
'destruyo el objeto y me voy:
Set Email = Nothing
Exit Sub
End If
'Dirección del remitente (nosotros)
Email.From = Trim([b1].Value)
'y comienzo el recorrido de la tabla, tomando los datos
'allí existentes y enviando los mails:
For x = 5 To UltFila
'Dirección del Destinatario
Email.To = Cells(x, 2)
'asunto:
Email.Subject = Cells(x, 3)
'cuerpo
Email.TextBody = Cells(x, 4)
'adjunto:
If Cells(x, 5) <> "" Then
Email.AddAttachment Cells(x, 5)
End If
'antes de enviar actualizamos los datos:
Email.Configuration.Fields.Update
'enviamos el mail
Email.Send
Next x
'destruyo el objeto, para liberar los recursos del sistema
If Not Email Is Nothing Then
Set Email = Nothing
End If
'libero posibles errores
On Error GoTo 0
MsgBox "Envios finalizados", vbInformation
End Sub
Function RevisarTabla(ByVal Fin As Long) As String
'recorro todos los registros de la tabla, revisando:
'que haya una direccion de mail
'que detallemos un asunto
'que el cuerpo del mail esté redactado
'que si hay un archivo anexo, el mismo exista:
For x = 5 To Fin
If InStr(1, Cells(x, 2), "@") = 0 Then
RevisarTabla = "Error en dirección de mail"
Cells(x, 2).Select
Exit Function
ElseIf Trim(Cells(x, 3)) = "" Then
RevisarTabla = "Falta el asunto"
Cells(x, 3).Select
Exit Function
ElseIf Trim(Cells(x, 4)) = "" Then
RevisarTabla = "Falta el mensaje"
Cells(x, 4).Select
Exit Function
ElseIf Trim(Cells(x, 5)) <> "" Then
If Dir(Trim(Cells(x, 5))) = "" Then
RevisarTabla = "El adjunto no existe"
Cells(x, 5).Select
Exit Function
End If
Else
'si no se detectaron errores, la función
'retorna "ok"
RevisarTabla = "ok"
End If
Next x
End Function
Function AbrirConexion() As Boolean
AbrirConexion = False
'ahora doy vida al objeto
Set Email = New CDO.Message
'indicamos los datos del servidor:
Email.Configuration.Fields(cdoSMTPServer) = "smtp.mail.yahoo.com"
Email.Configuration.Fields(cdoSendUsingMethod) = 2
'indicamos el nro de puerto. Por defecto es el 25, pero gmail usa el 465. Hay otro
'(que ahora no recuerdo) pero no me funcionaba... Por eso no lo usé mas y lo olvidé
Email.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = CLng(465)
'aqui dejamos en claro si el servidor que usamos requiere o nó autentificación.
'1=requiere, 0=no requiere. Para gmail, entonces, 1
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/" _
& "configuration/smtpauthenticate") = Abs(1)
'segundos para el tiempo maximo de espera. Aconsejo no modificarlo:
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
'aqui defino como True (verdadera) a la autentificación para el envío de mails.
Autentificacion = True
'ahora configuramos las opciones de login de gmail:
If Autentificacion Then
'nombre de usuario
Email.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusername") = "[email protected]"
'contraseña
Email.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xxxxxxxxx"
'si el servidor utiliza SSL (secure socket layer). En gmail: True
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
AbrirConexion = True
Else
AbrirConexion = False
End If
End Function