Como corregir macro excel que envía mail de rango y adjunto?

Tengo una macro que me permite enviar selección de hoja de Excel. Funcionaba perfectamente hasta que le agregue la línea para seleccionar el archivo adjunto. Allí detiene la ejecución y dice “Error de automatización”. Desde ya muchas gracias por tu valiosa ayuda.

Este es la Macro:

Sub

Sub Enviar_Rango_a_Destinatario_de_correo()

'Seleccionamos el rango de celdas a enviar Select

ActiveSheet.Range("A1:m27").Select

' Show the envelope on the ActiveWorkbook.

ActiveWorkbook.EnvelopeVisible = True
'Llamamos al envío...

With ActiveSheet.MailEnvelope

.Item.To = ThisWorkbook.Sheets("Formulario (Envio)").Range("Q2").Value

.Item.cc = ThisWorkbook.Sheets("Formulario (Envio)").Range("R2").Value
'con copia a...
.Item.Subject = ThisWorkbook.Sheets("Formulario (Envio)").Range("P3").Value
' Llamamos al atachment . ".Item.Attachments = (ruta_archivo)"
.Item.Send

End With

End Sub

Sub selec_archivo()

On Error GoTo a2

ruta_archivo = Application.GetOpenFilename(Title:="Click para Seleccionar Archivo a Enviar")
If ruta_archivo = False Then
Exit Sub
Else
Cells(7, 16).Value = ruta_archivo
End If
a2:

End Sub

()

'Seleccionamos el rango de celdas a enviar Select

ActiveSheet.Range("A1:m27").Select

' Show the envelope on the ActiveWorkbook.

ActiveWorkbook.EnvelopeVisible = True
'Llamamos al envío...

With ActiveSheet.MailEnvelope

.Item.To = ThisWorkbook.Sheets("Formulario (Envio)").Range("Q2").Value

.Item.cc = ThisWorkbook.Sheets("Formulario (Envio)").Range("R2").Value
'con copia a...
.Item.Subject = ThisWorkbook.Sheets("Formulario (Envio)").Range("P3").Value
.Item.Attachments.Add (ruta_archivo)
' Llamamos al atachment de este modo y se detiene la ejecución. Dice error de automatización"
.Item.Send

End With

End Sub

Sub selec_archivo()

On Error GoTo a2

ruta_archivo = Application.GetOpenFilename(Title:="Click para Seleccionar Archivo a Enviar")
If ruta_archivo = False Then
Exit Sub
Else
Cells(7, 16).Value = ruta_archivo
End If
a2:

End Sub

1 Respuesta

Respuesta
1

Lo que pasa es que la variable de ruta_archivo está en otra rutina.

Prueba con el siguiente:

Sub Enviar()
    ActiveSheet.Range("A1:m27").Select          'Seleccionamos el rango de celdas a enviar Select
    ActiveWorkbook.EnvelopeVisible = True       ' Show the envelope on the ActiveWorkbook.
    ruta_archivo = Application.GetOpenFilename(Title:="Click para Seleccionar Archivo a Enviar")
    '
    With ActiveSheet.MailEnvelope               'Llamamos al envío...
        .Item.To = ThisWorkbook.Sheets("Formulario (Envio)").Range("Q2").Value      'para
        .Item.cc = ThisWorkbook.Sheets("Formulario (Envio)").Range("R2").Value      'con copia a...
        .Item.Subject = ThisWorkbook.Sheets("Formulario (Envio)").Range("P3").Value 'asunto
         If ruta_archivo <> False Then
           . Item. Attachments. Add (ruta_archivo) 'carga el archivo
        End If
        .Item.Send
    End With
    ActiveWorkbook.EnvelopeVisible = False
End Sub

'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

Hola Dante: 

Hay una avance , porque ahora la macro no se detiene en la ejecución, pero requiere que seleccione el archivo adjunto a enviar. Es decir, no toma la ruta del archivo que está guardada en la cela P7, de acuerdo a la segunda subrutina.   Me puedes ayudar?

Sub selec_archivo()

On Error GoTo a2

ruta_archivo = Application.GetOpenFilename(Title:="Click para Seleccionar Archivo a Enviar")
If ruta_archivo = False Then
Exit Sub
Else
Cells(7, 16).Value = ruta_archivo
End If
a2:

End Sub

Entonces, ejecuta primero tu macro para guardar la ruta ruta y el archivo en la celda P7,

Después ejecuta así la macro:

Sub Enviar()
    ActiveSheet.Range("A1:m27").Select          'Seleccionamos el rango de celdas a enviar Select
    ActiveWorkbook.EnvelopeVisible = True       ' Show the envelope on the ActiveWorkbook.
    '
    '
    With ActiveSheet.MailEnvelope               'Llamamos al envío...
        . Item.To = ThisWorkbook. Sheets("Formulario (Envio)"). Range("Q2").Value      'para
        . Item.cc = ThisWorkbook. Sheets("Formulario (Envio)"). Range("R2").Value      'con copia a...
        . Item.Subject = ThisWorkbook. Sheets("Formulario (Envio)"). Range("P3").Value 'asunto
         If ThisWorkbook.Sheets("Formulario (Envio)").range("P7").value <> "" Then
           .Item.Attachments.Add (ThisWorkbook.Sheets("Formulario (Envio)").range("P7").value) 'carga el archivo
        End If
        .Item.Send
    End With
    ActiveWorkbook.EnvelopeVisible = False
End Sub

'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 

¡Muchas Gracias!  Me ha funcionado de manera PERFECTA.   Te agradezco muchísimo esta solución de un tema al que no le encontraba respuesta. Eres lo máximo!!!!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas