Enviar archivo protegido por correo y la contraseña en un segundo correo usando macros en Excel

Algunas empresas piden que sus archivos de Excel que sean enviados por correo tengan contraseña y en un segundo correo, enviar la contraseña. Estos son tema de seguridad que pueden aplicar en tu empresa, aunque también está la opción de compartir los archivos por la nube.

En este video tutorial vamos a desarrollar una macro para guardar un archivo asignándole una contraseña aleatoria. Primero vamos a enviar el archivo protegido, luego en un segundo correo vamos a enviar la contraseña que se le asignó al archivo de manera automática.

Ver Video Enviar archivo protegido y contraseña en dos correos por Outlook

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Antes de comenzar

Primero será necesario que cuentes con Outlook de Office instalado en tu equipo y con mínimo una cuenta de correo configurada.

Aquí más tutoriales para enviar emails desde Excel.

La macro que te regalaré es recomendable que esté alojada en el Libro de macros personal, para que cuando se ejecute, se guarde con contraseña el archivo activo y en un seguro correo se envíe el password.

Si no tienes el Libro PERSONAL activado, te sugiero activarlo siguiendo los siguientes pasos:

  • Pestaña Vista.
  • En la sección Macros elegimos Grabar macro.
  • En Guardar macro en vamos a elegir Libro de macros personal.

No es necesario grabar pasos. En la misma Pestaña Vista puedes detener la grabación y ya se habrá creado el archivo PERSONAL. Sólo entras al VBE de Visual Basic y en el archivo PERSONAL insertas un nuevo Módulo.

Importante. Debes activar la referencia a Microsoft Outlook object library, entrando desde el IDE de VBA al menú Herramientas y elegir Referencias.

Primer correo con el archivo protegido con contraseña

La macro lo primero que hará es guardar una copia del archivo activo en un ruta temporal y le asignará una contraseña que se generará de manera automática usando una función.

Enviar por correo archivo de Excel protegido con contraseña

Figura 1. Enviar por correo archivo de Excel protegido con contraseña.

Segundo correo con la contraseña

En la segunda parte de la macro generaremos una contraseña con una función que desarrollé, donde le indicamos el largo de la contraseña y se genera una secuencia de caracteres aleatorios. Ese mismo password se le asignará al archivo de Excel, además de que irá escrita en el cuerpo del segundo correo.

En un segundo correo enviamos la contraseña del archivo de Excel

Figura 2. En un segundo correo enviamos la contraseña del archivo de Excel.

Código VBA de macros

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh

Sub EnviarEmailPassword()

Dim Correos As String
Dim Contraseña As String
Dim RutaTemporal As String
Dim NombreArchivo As String
Dim OutlookApp As Outlook.Application
Dim OItem As Outlook.MailItem

Correos = "sergioacamposh@hotmail.com"
Contraseña = PassAleatorio(5)

RutaTemporal = VBA.Environ("temp") & "\"
NombreArchivo = RutaTemporal & "Archivo con password.xlsm"
ActiveWorkbook.SaveAs NombreArchivo, xlOpenXMLWorkbookMacroEnabled, Contraseña

Set OutlookApp = New Outlook.Application
Set OItem = OutlookApp.CreateItem(olMailItem)

With OItem
    .To = Correos
    .Subject = "Envío reporte con contraseña"
    .Body = "Se envía correo correspondiente a las ventas de..."
    .Attachments.Add NombreArchivo
    .Send
End With

Set OItem = OutlookApp.CreateItem(olMailItem)

With OItem
    .To = Correos
    .Subject = "Envío contraseña"
    .Body = "Se envía contreaseña: " & Contraseña
    .Send
End With

ActiveWorkbook.Close SaveChanges:=False
VBA.Kill NombreArchivo

End Sub

Function PassAleatorio(Cantidad As Integer)
Dim i As Integer
'
'Usar siempre en una UDF
Application.Volatile
'
'Declaramos variables
Dim Valor As Variant
Dim Valor1 As Variant
'
Valor1 = Null
'
'Recorremos de 1 a la Cantidad especificada en el parámetro Cantidad
For i = 1 To Cantidad
    '
    Valor = Chr(Application.WorksheetFunction.RandBetween(48, 90))
    '
    Valor1 = Valor1 & Valor
    '
Next i
'
'Asignamos a la función los caractere concatenados.
PassAleatorio = Valor1
'
End Function

Descarga el archivo de ejemplo

Enviar archivo adjunto por email y contraseña en otro correo – EXCELeINFO.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

También te podría gustar...