Este tutorial le mostrará cómo enviar correos electrónicos desde Excel a través de Outlook usando VBA.
Envío del libro de trabajo activo
1234567891011121314151617181920 | Función SendActiveWorkbook (strTo como cadena, strSubject como cadena, strCC opcional como cadena, strBody opcional como cadena) como booleanoEn caso de error, reanudar siguienteAtenuar appOutlook como objetoAtenuar mItem como objeto'crear una nueva instancia de OutlookEstablecer appOutlook = CreateObject ("Outlook.Application")Establecer mItem = appOutlook .CreateItem (0)Con mItem.To = strTo.CC = "".Subject = strSubject.Cuerpo = strBody.Attachments.Add ActiveWorkbook.FullName'use enviar para enviar inmediatamente o mostrar para mostrar en la pantalla.Display 'o .EnviarTerminar con'limpiar objetosEstablecer mItem = NadaEstablecer appOutlook = NadaFunción final |
La función anterior se puede llamar mediante el procedimiento siguiente
123456789101112131415 | Sub SendMail ()Dim strTo como cadenaDim strSubject como cadenaDim strBody como cadena'rellenar variablesstrTo = "[email protected]"strSubject = "Busque el archivo de finanzas adjunto"strBody = "aquí va un texto para el cuerpo del correo electrónico"'llamar a la función para enviar el correo electrónicoSi SendActiveWorkbook (strTo, strSubject`` strBody) = true entoncesMsgbox "Creación exitosa de correo electrónico"DemásMsgbox "¡Error al crear el correo electrónico!"Terminara siEnd Sub |
Uso de enlace anticipado para hacer referencia a la biblioteca de objetos de Outlook
El código anterior usa Enlace tardío para hacer referencia al objeto de Outlook. Puede agregar una referencia a Excel y declarar la aplicación de Outlook y el elemento de correo de Outlook utilizando Early Binding si lo prefiere. Early Binding hace que el código se ejecute más rápido, pero lo limita, ya que el usuario necesitaría tener la misma versión de Microsoft Office en su PC.
Haga clic en el menú Herramientas y Referencias para mostrar el cuadro de diálogo de referencia.
Agregue una referencia a la biblioteca de objetos de Microsoft Outlook para la versión de Office que está usando.
A continuación, puede modificar su código para utilizar estas referencias directamente.
Una gran ventaja del enlace anticipado son las listas desplegables que le muestran los objetos que están disponibles para usar.
Envío de una sola hoja desde el libro activo
Para enviar una sola hoja, primero debe crear un nuevo libro de trabajo a partir del libro de trabajo existente con solo esa hoja y luego enviar esa hoja.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | Función SendActiveWorksheet (strTo como cadena, strSubject como cadena, strCC opcional como cadena, strBody opcional como cadena) como booleanoEn caso de error, vaya a eh'declarar variables para contener los objetos requeridosDim wbDestination As WorkbookDim strDestName como cadenaDim wbSource como libro de trabajoDim wsSource como hoja de trabajoAtenuar la aplicación como objetoAtenuar OutMail como objetoDim strTempName como cadenaDim strTempPath como cadena'primero crea el libro de destinoEstablecer wbDestination = Workbooks.AddstrDestName = wbDestination.Name'establecer el libro de trabajo y la hoja de origenEstablecer wbSource = ActiveWorkbookEstablecer wsSource = wbSource.ActiveSheet'copie la hoja activa en el nuevo libro de trabajowsSource.Copy After: = Workbooks (strDestName) .Sheets (1)'guardar con un nombre temporalstrTempPath = Environ $ ("temp") & "\"strTempName = "Lista obtenida de" & wbSource.Name & ".xlsx"Con wbDestination.SaveAs strTempPath & strTempName'ahora envíe el libro de destino por correo electrónicoEstablecer OutApp = CreateObject ("Outlook.Application")Establecer OutMail = OutApp.CreateItem (0)Con OutMail.To = strTo.Subject = strSubject.Cuerpo = strBody.Attachments.Add wbDestination.FullName'use enviar para enviar inmediatamente o mostrar para mostrar en la pantalla.Display 'o .DisplayTerminar con.Cerrar FalsoTerminar con'eliminar el libro de trabajo temporal que ha adjuntado a su correoMata strTempPath y strTempName'limpia los objetos para liberar la memoriaEstablecer wbDestination = NadaEstablecer wbSource = NadaEstablecer wsSource = NadaSet OutMail = NadaSet OutApp = NadaFunción de salidaeh:MsgBox Err. DescripciónFunción final |
y para ejecutar esta función, podemos crear el siguiente procedimiento
12345678910111213 | Sub SendSheetMail ()Dim strTo como cadenaDim strSubject como cadenaDim strBody como cadenastrTo = "[email protected]"strSubject = "Busque el archivo de finanzas adjunto"strBody = "aquí va un texto para el cuerpo del correo electrónico"Si SendActiveWorksheet (strTo, strSubject`` strBody) = True EntoncesMsgBox "Creación exitosa de correo electrónico"DemásMsgBox "¡Error al crear el correo electrónico!"Terminara siEnd Sub |