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!
12 comentarios en “Cómo enviar adjunta por correo electrónico una hoja de Excel”
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://aprende.ayudaexcel.com/2ae/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