Enviar correo con datos de archivo excel usando visual basic

Es un trabajo y la verdad se muy poco de vba, necesito que al prender el computador se envíe un mensaje al correo solo si faltan 10 días para el vencimiento de una boleta, además que se cierre automáticamente.
Mi problema está en que no se que función (o lenguaje) usar para que recorra primero los códigos, diferenciando las letras de números (quiero que identifique los números y luego vea la fecha ya que las letras son solo el titulo del proyecto, para ser más clara: en la columna A1 va el titulo y en A2 y A3 las boletas con códigos, luego A4 un titulo seguido de A5 con solo un código y así...)
No tiene limite de datos ya que los van pegando conforme lleguen y borrando acorde al vencimiento pero esto puede ser manual.

Aparte de eso no se como declarar la variable cells ya que la he visto en muchos ejemplos pero no se en que fallo.
En el fondo no se nada :( así que acepto links o libros con información que me puedan ayudar a entender

2

2 Respuestas

886.350 pts. "Todos somos genios. Pero si juzgas a un pez por su...

Te dejo una página (lamentablemente en inglés) donde tienes muchas opciones de envío de mail con Excel.

Salu2

Muchas gracias! la verdad lo del correo salio mucho mas facil de lo que pensaba, pero debi separar el archivo de la macro. 
Me explico: en un archivo (principal) solo ejecuto la macro y llamo al libro "datos", de ahi saco los datos para enviar los correos. 

En cuanto a las fechas, en el mismo archivo puse la resta de fechas y solo veo que esten en cierto rango de dias.
Ojala me puedas ayudar con otro detalle: al iniciar el computador, primero inicia el excel y luego outlook, por lo que excel me envia un error al no encontrar la aplicación, por lo tanto necesito que se abra uno o dos minutos despues de iniciar el pc.
Ya intente programandola pero salta error en la misma aplicacion de iniciar programas a cierta hora o evento.
te dejo el codigo del libro "principal"(thisworkbook), donde supongo que el timer deberia ir en esta parte:

Private Sub Workbook_Open()

Call Workbook_Abrir
Workbook.Close
Application.Quit
End
End Sub

- y este es del modulo para enviar el correo con los datos

Sub Workbook_Abrir()

Workbooks.Open "C:\Users\blablalbla\Desktop\Datos.xlsx"
Dim i As Integer
Dim Asunto As String
Dim Msg As Variant
Dim Codigo As Variant
Dim FVen As Variant

Application.Visible = False
For i = 1 To Sheets("Datos1").Range("H" & Rows.Count).End(xlUp).Row    ' siempre le agregan o quitan datos a datos1, tambien las fechas cambian asi que necesito que las lea todos los dias
If Cells(i, 8) > 25 And Cells(i, 8) <= 27 Then
Codigo = Cells(i, 1)
FVen = Cells(i, 6)
Tipo = Cells(i, 2)
'cuerpo del mensaje
Msg = "La " & Tipo & " está proxima a vencer, con fecha para: " & FVen & vbNewLine
Msg = Msg & " Con codigo " & Codigo
Dim olapp As Outlook.Application
Set olapp = CreateObject("Outlook.Application")
Dim olmail As Outlook.MailItem
Set olmail = olapp.CreateItem(olMailItem)
With olmail
.To = "[email protected]"
.Subject = Asunto
.Body = Msg
.Send
End With
End If

Next i

ActiveWorkbook.Close savechanges:=False       ' Aqui tengo la duda, la verdad no se si cierra el archivo "datos" o "principal"


End

Disculpas pero por qué se inicia Excel al iniciar la computadora. ¿No puedes simplemente hacer que NO se inicie de entrada y la inicias cuando lo necesites?

Porque así me lo exigen, ellos tienen documentos con fecha de vencimiento a dos meses más (y a la vez días distintos), la idea es que les avise solo unos días antes de esa fecha. Esto para evitar abrir el archivo en ese periodo, sobre todo por que es algo que olvidan

Ok, entonces tal vez puedas hacer al reves. Que el outlook NO se inicia de manera automática, sino que sea el excel quien lo abra.

Es más o menos lo que ya tienes, pero te dejo un link a un ejemplo

5.900 pts. El conocimiento es algo que nunca terminamos de poseer...

Esta macro permite enviar por correo la hoja activa, se debe tener instalado y configurado Microsoft Oulook

Sub EnviarCorreo()
'
Dim Nom As String
Dim Ruta As String
Dim Msg As String
'
On Error Resume Next
'
Nom = ActiveSheet.Name
'
Ruta = Environ("temp") & "\"
Nom = Ruta & Nom & ".xlsx"

ActiveWorkbook.ActiveSheet.Copy
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs NombreArchivo
Application.DisplayAlerts = True
CommandBars.ExecuteMso ("FileSendAsAttachment")
ActiveWorkbook.Close False
Kill NombreArchivo
'
On Error GoTo 0
'
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas