Cómo enviar adjunta por correo electrónico una hoja de Excel
Una de las consultas más habituales en los foros de Excel es acerca de la posibilidad de enviar por correo electrónico la hoja con la que se está trabajando en ese momento (la hoja activa). Buscando información acerca de ello, he encontrado un código que tras modificarlo, lo publico. La verdad es que no recuerdo el mensaje en concreto. Lo que sí sé es que fue publicado en el foro de Mr. Excel.
El usuario trabaja con hojas de cálculo que se actualizan automáticamente cada 2 o 3 minutos con información sobre bolsa. Al actualizarse esa información, se ejecutan unos cálculos que dan ciertos resultados. Era de vital importancia que la hoja fuese enviada lo más rápidamente posible para ganar tiempo a sus competidores.
El código para enviar por correo electrónico la hoja activa es el siguiente:
Sub EnviarHojaActiva()
'Este código funciona en las versiones 97-2010
Dim FileExtStr As String
Dim FileFormatNum As Long
Dim Sourcewb As Workbook
Dim Destwb As Workbook
Dim TempFilePath As String
Dim TempFileName As String
Dim I As Long
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Set Sourcewb = ActiveWorkbook
'Copia la hoja a un libro nuevo
ActiveSheet.Copy
Set Destwb = ActiveWorkbook
'Determina la versión de Excel y la extensión del archivo
With Destwb
If Val(Application.Version) < 12 Then
'Estás utilizando 97-2003...
FileExtStr = ".xls": FileFormatNum = -4143
Else
'Estás utilizando 2007, 2010 o 2013. Sale de la macro al responder
'NO en el cuadro de diálogo de seguridad que aparece cuando copias
'una hoja desde un archivo xlsm con las macros deshabilitadas.
If Sourcewb.Name = .Name Then
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
MsgBox "Has respondido no en el cuadro de diálogo de seguridad"
Exit Sub
Else
Select Case Sourcewb.FileFormat
Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
Case 52:
If .HasVBProject Then
FileExtStr = ".xlsm": FileFormatNum = 52
Else
FileExtStr = ".xlsx": FileFormatNum = 51
End If
Case 56: FileExtStr = ".xls": FileFormatNum = 56
Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
End Select
End If
End If
End With
' 'Elimina las comillas de las siguiente líneas
' 'si quieres sustituir las fórmulas por valores
' With Destwb.Sheets(1).UsedRange
' .Cells.Copy
' .Cells.PasteSpecial xlPasteValues
' .Cells(1).Select
' End With
' Application.CutCopyMode = False
'Graba la hoja que se enviará por correo
TempFilePath = Environ$("temp") & ""
TempFileName = "Parte de " & Sourcewb.Name & " " _
& Format(Now, "dd-mmm-yy h-mm-ss")
With Destwb
.SaveAs TempFilePath & TempFileName & FileExtStr, _
FileFormat:=FileFormatNum
On Error Resume Next
For I = 1 To 3
' Modifica el correo del destinatario y el asunto
.SendMail "CORREO@MIDOMINIO.COM", "Este es el asunto"
If Err.Number = 0 Then Exit For
Next I
On Error GoTo 0
.Close SaveChanges:=False
End With
'Elimina el archivo temporal que se ha creado
Kill TempFilePath & TempFileName & FileExtStr
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
Al ejecutar la macro se abrirá un cuadro solicitando permiso para enviar el correo. Es una medida de seguridad para prevenir posibles envíos no autorizados.
¿Te ha servido el artículo? Házmelo saber!
con esto lo mandas a través del cliente de escritorio de correo, pero si quieres que se mande a través de gmail? por ejemplo, o de cualquier otro servidor de correo web? Gracias!
http://www.excelpatas.com/2013/02/enviar-correo-electronico-usando-smtp.html
Si lo utilizas y te sirve, por favor, coméntalo.
Por qúe piensas que no merece la pena este tipo de envÃo? A mà me gustarÃa automatizarlo incluso, que lo haga cada hora.
DeberÃas sustituir los datos del servidor por variables que tomen el valor de un formulario o de una pequeña base de datos alojada en una hoja. Como medida de seguridad, solicita siempre la contraseña del correo electrónico. Asà prevendrás correos no autorizados.
me contiene esta lÃnea
.SendMail «CORREO@MIDOMINIO.COM«, «Este es el asunto»
en rojo dentro del modulo. ¿Qué puede ser? el correo ya lo integre, es decir joaley7@tal y tal.com
Échale un vistazo a este enlace:
https://ayudaexcel.com/foro/threads/enviar-correo-por-microsoft-outlook-cuando-se-cumpla-una-fecha.35177/
SERGIO, COMO SIEMPRE EXPECTACULAR TUS TUTORIALES, MUY SENCILLOS Y CLAROS, PERO DE PRONTO Y SI ES DE INTERES DE ALGUNA PERSONA QUE DESEE ENVIAR UNA MAIL DIRECTAMENTE DESDE EXCEL PODRIA UTILIZAR EL COMPLEMENTO RDBMAIL QUE FUNCIONA EXCELENTE. YO TRABAJO CON EXCEL 97 Y ESTA OK.
SALUDOS