# Mandar hojal automática a varios emails según filtro



## josevaldesv (Mar 1, 2007)

Buen día a todos...

Estoy tratando de mandar un e-mail automático a varias direcciones de correo electrónico dependiendo según los datos filtrados (que no mande a los que no están en la columna A, por ejemplo).

De mrexcel.com tomé un código que manda la hoja de excel como _attachment_ al e-mail que está en el código VBA, pero no logro que tome los datos ni siquiera de una celda de la hoja, mucho menos de una columna filtrada.

PLEASE HELP!   

Intenté esto:

```
dim correos as Range
' varias instrucciones
correos.value = Range("A1")
.SendTo = correos
'suponiendo que en A1 está el correo "justcantmakeit@almosttired.com"
```

pero sólo me sale cuando lo pongo así:

```
.SendTo = "icannotdoti@butitry.com"
```

Aquí está TODO lo demás:

```
Sub SendLotusNote()

' be sure to reference the Lotus Domino Objects, domobj.tlb
Dim objNotesSession As Object
Dim objNotesDatabase As Object
Dim objNotesDocument As Object
Dim objAttachment As Object
Dim objRichText As Object
Dim FullPath As String
Dim FileName As String
Dim Msg As String

Const EMBED_ATTACHMENT = 1454

Set objNotesSession = CreateObject("Notes.Notessession")
Set objNotesDatabase = objNotesSession.GetDatabase("", "")
Call objNotesDatabase.OpenMail 'default mail database
If objNotesDatabase.IsOpen = False Then
MsgBox "Cannot connect to Lotus Notes."
Exit Sub
End If
Set objNotesDocument = objNotesDatabase.CreateDocument
Call objNotesDocument.replaceitemvalue("Form", "Memo")

'Do ' prompt user for file name and location
FullPath = Application.GetSaveAsFilename
'Loop Until FullPath <> False
' save to new loc; Lotus only sends last-saved copy
ActiveWorkbook.SaveAs FullPath
FileName = ActiveWorkbook.Name

' assemble message
Set objRichText = objNotesDocument.CreateRichTextItem("Body")
Set objAttachment = objRichText.EmbedObject(EMBED_ATTACHMENT, "", _
FullPath, FileName)
Msg = "Lotus Note sent from " & objNotesSession.CommonUserName
With objNotesDocument
.Subject = "Weekly Report"
.Body = Msg
'   Declare a Message Subject
'    Subject = InputBox("Please Enter the Message Subject", "Message Subject")
'        MailDoc.Subject = Subject
'            If Subject = "" Then MailDoc.Subject = "Volunteer Update"
'        frmE_Mail.Show
'    MailDoc.Body = Message
'
.SendTo = "icannotdoti@butitry.com"
.SaveMessageOnSend = True ' save in Sent folder
.Send (False)
End With

Set objNotesSession = Nothing
Set objNotesDatabase = Nothing
Set objNotesDocument = Nothing
Set objAttachment = Nothing
Set objRichText = Nothing
MsgBox "Your Lotus Notes message was successfully sent ..." & _
Chr$(13) & _
Chr$(13) & _
"The Excel form will now auto-close.", vbInformation, "Message Sent """
ActiveWorkbook.Close SaveChanges:=False

End Sub
```
[/list][/code]


----------



## Greg Truby (Mar 1, 2007)

Bueno, es una pregunta tan obvia, pero hay que hacerla.  ¿Usted usa Lotus Notes para correo electrónico? ¿No usa Outlook, verdad?


----------



## josevaldesv (Mar 1, 2007)

jajjaa... fair enough

sí, no es por gusto sino por imposición, pero sí, uso Lotus Notes

YA PUDE JALAR UN DATO DESDE UNA CELDA DE EXCEL!!   
    Olvidé poner *.value* 

```
.SendTo = Range("a1").Value
```

Pero todavía no puedo hacer que se filtre.... supongo que lo haré con un "loop" que vaya revisando fila por fila... algún consejo?[/code]


----------



## Greg Truby (Mar 1, 2007)

Me alegra que usted no se haya ofendido.  Pero hay gente aquí (bueno no _aquí_ pero en el foro de inglés) que trataría de aplicar el código arriba aunque ni usaba Lotus. 

Aunque el señor Oliver no habla español, mandé un mensaje privado a él (NateO) porque creo que él fue el autor original de ese código.  Y si no, pues, sé que él lo conoce.  Tal vez Nate pueda ver el error.


----------



## josevaldesv (Mar 1, 2007)

Greg... creo que no fui lo suficientemente claro.

Quise decir que YA ENCONTRÉ MI ERROR y ya puedo jalar datos de la hoja de Excel.

Thanks to NateO though...

Ahora mi problema es otro:
Digamos que en columna A tengo un listado de actividades.
En columna B tengo el nombre del responsable, en C tengo sus e-mails y de la columna D a Z tengo fechas.
En la matriz de D2:Z100 tengo entonces una "X" para marcar que de la actividad 1 es responsable la persona A para la fecha 1; de la actividad 2 es responsable la persona C para la fecha 10; de la actividad 3 es responsable otra vez la persona C pero ahora para la fecha 2, etc.

Si filtro por non-blanks en cualquier fecha, me pondrá una lista de responsables, pero estos responsables pueden estar repetidos en varias actividades que deben estar listas ese día.

¿Cómo puedo hacer para que mande el e-mail a todas las personas en la lista, pero *sin que se repitan *los nombres? 

Gets funnier everytime.


----------



## Greg Truby (Mar 2, 2007)

Bueno, ya me tenés más confundido que lo normal.  ¿Usted ya lo tiene funcionando bien?  En el sentido que al correr el macro sí manda un correo electrónico como debe.  Mientras esto sí es cierto entonces podemos dejar Nate en paz.  El resto - hacer un macro que solamente extrae ciertas celdas, sí puedo explicar sin problema (creo).


----------



## josevaldesv (Mar 2, 2007)

jajajajaa... lo siento   
mi bad.... en mi cabeza estaba claro, pero ya después cuando leí lo que escribí, me di cuenta que sí lo hice muy confuso....

Es correcto, YA FUNCIONA LA MACRO DE MANDAR UN E-MAIL CORRECTAMENTE....

*Ahora lo que no puedo hacer es que, al filtrar una columna, mande un e-mail a las direcciones mostradas en ese filtro, PERO que si una dirección está repetida, no mande dos, sino un solo mensaje.*

Espero ya por fin haber sido claro.

PS: Creo que podemos dejar a NateO (Oliver) en paz.. thanks though.


----------



## carlos-alberto (Jun 25, 2010)

hola,

No puedo evitar pedirte ayuda ya que estoy atorado en lo que tu quieres hacer y necesito tu apoyo para revisar este codigo ya que no lo he podido echar a andar.

segui tus instrucciones pero no he logrado mandar ni un correo de mi lista...

aqui esta el codigo que tengo...


```
Dim correos As Range
' varias instrucciones
correos.Value = Range("A1").Value
.SendTo = correos
Sub SendLotusNote()
' be sure to reference the Lotus Domino Objects, domobj.tlb
Dim objNotesSession As Object
Dim objNotesDatabase As Object
Dim objNotesDocument As Object
Dim objAttachment As Object
Dim objRichText As Object
Dim FullPath As String
Dim FileName As String
Dim Msg As String
Const EMBED_ATTACHMENT = 1454
Set objNotesSession = CreateObject("Notes.Notessession")
Set objNotesDatabase = objNotesSession.GetDatabase("", "")
Call objNotesDatabase.OpenMail 'default mail database
If objNotesDatabase.IsOpen = False Then
MsgBox "Cannot connect to Lotus Notes."
Exit Sub
End If
Set objNotesDocument = objNotesDatabase.CreateDocument
Call objNotesDocument.replaceitemvalue("Form", "Memo")
'Do ' prompt user for file name and location
FullPath = Application.GetSaveAsFilename
'Loop Until FullPath <> False
' save to new loc; Lotus only sends last-saved copy
ActiveWorkbook.SaveAs FullPath
FileName = ActiveWorkbook.Name
' assemble message
Set objRichText = objNotesDocument.CreateRichTextItem("Body")
Set objAttachment = objRichText.EmbedObject(EMBED_ATTACHMENT, "", _
FullPath, FileName)
Msg = "Lotus Note sent from " & objNotesSession.CommonUserName
With objNotesDocument
.Subject = "Weekly Report"
.Body = Msg
' Declare a Message Subject
' Subject = InputBox("Please Enter the Message Subject", "Message Subject")
' MailDoc.Subject = Subject
' If Subject = "" Then MailDoc.Subject = "Volunteer Update"
' frmE_Mail.Show
' MailDoc.Body = Message
'
' .SendTo = "icannotdoti@butitry.com"    ' (commented out)
[B][COLOR=blue].SendTo = Range("A1").Value[/COLOR][/B]
.SaveMessageOnSend = True ' save in Sent folder
.Send (False)
End With
Set objNotesSession = Nothing
Set objNotesDatabase = Nothing
Set objNotesDocument = Nothing
Set objAttachment = Nothing
Set objRichText = Nothing
MsgBox "Your Lotus Notes message was successfully sent ..." & _
Chr$(13) & _
Chr$(13) & _
"The Excel form will now auto-close.", vbInformation, "Message Sent """
ActiveWorkbook.Close SaveChanges:=False
End Sub
```


----------



## Greg Truby (Jun 26, 2010)

Bueno, notó usted que José tuvo que cambiar parte del código arriba para...
	
	
	
	
	
	



```
.SendTo = Range("A1").Value
```
 en la parte del programa que marqué en azul en su post.  Obviamente usted tendrá que cambiar la "A1" a la dirección de la celda que contiene la dirección de correo-e deseada.


----------

