Una macro que lo que tenga seleccionado incluyendo gráficas, me lo guarde como archivo con un nombre específico, mande x Outlook

Que una hoja de Excel, seleccionamos un rango y que este rango incluyendo gráficas, lo guarde como un archivo con un nombre determinado, y mande a ciertas personas. Tengo dominado parcialmente el proceso, ya que este proceso funciona bien hasta que me toca seleccionar una gráfica esta no la copia, me podrían dar ideas u una macro que funcione al 100%. La mía la pongo aquí a ver si me falta o sobra algo. Gracias

Sub ArchivoEnvio()

Dim Source As Range
Dim Dest As Workbook
Dim wb As Workbook
Dim TempFilePath As String
Dim TempFileName As String
Dim FileExtStr As String
Dim FileFormatNum As Long
Dim OutApp As Object
Dim OutMail As Object

Set Source = Nothing
On Error Resume Next
Set Source = Selection.SpecialCells(xlCellTypeVisible)
On Error GoTo 0

If Source Is Nothing Then
MsgBox "La fuente no es un rango o la hoja está protegida, por favor, corrige y vuelve a intentarlo.", vbOKOnly
Exit Sub
End If

If ActiveWindow.SelectedSheets.Count > 1 Or _
Selection.Cells.Count = 1 Or _
Selection.Areas.Count > 1 Then
MsgBox "Ocurrió un error :" & vbNewLine & vbNewLine & _
"Haya más de una hoja seleccionada." & vbNewLine & _
"No selecciono una la celda para enviar.." & vbNewLine & _
"Ha seleccionado más de un área." & vbNewLine & vbNewLine & _
"Por favor, corrija y vuelva a intentarlo.", vbOKOnly
Exit Sub
End If

With Application
.ScreenUpdating = False
.EnableEvents = False
End With

Set wb = ActiveWorkbook
Set Dest = Workbooks.Add(xlWBATWorksheet)

Source.Copy
With Dest.Sheets(1)
.Cells(1).PasteSpecial Paste:=8
.Cells(1).PasteSpecial Paste:=xlPasteValues
.Cells(1).PasteSpecial Paste:=xlPasteFormats
.Cells(1).Select
Application.CutCopyMode = False
End With

TempFilePath = Environ$("temp") & "\"
TempFileName = " " & wb.Name & " " & Format(Now, "dd-mmm-yy h-mm-ss")
If Val(Application.Version) < 12 Then
FileExtStr = ".xls": FileFormatNum = -4143
Else
FileExtStr = ".xlsx": FileFormatNum = 51
End If

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

With Dest
.SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
On Error Resume Next
With OutMail
.To = "[email protected]"
.CC = ""
.BCC = ""
.Subject = "*Archivo por Hora " & Hour(Now) & ":" & "00" & "Hrs"
.Body = ""
.Attachments.Add Dest.FullName
.Display
End With
On Error GoTo 0
.Close savechanges:=False
End With

Kill TempFilePath & TempFileName & FileExtStr

Set OutMail = Nothing
Set OutApp = Nothing

With Application
.ScreenUpdating = True
.EnableEvents = True
End With

End Sub

Añade tu respuesta

Haz clic para o