Saving worksheet as image

JoeyGaspard

Board Regular
Joined
Jul 22, 2019
Messages
164
Hi all, I have an excel workbook that has multiple tabs, and once a week I have to mail 2 of the tabs (worksheets) to our Plant manager, I use a Mail Sheets Array and a macro button to do this and it works fine, but recently, I have added a "Charts" worksheet, and when it makes the temp copy of the worksheet, it replaces all the dates in the charts with a string of numbers as it is still trying to reference the table where the dates reside. I am trying to get the copy process to, for lack of better terms, "paste special as an image", this way the date values remain, here is the vba I am currently using, any help is greatly appreciated!

Sub Mail_Sheets_ArrayMV()


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 OutApp As Object
Dim OutMail As Object
Dim sh As Worksheet
Dim TheActiveWindow As Window
Dim TempWindow As Window


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


Set Sourcewb = ActiveWorkbook


'Copy the sheets to a new workbook
'We add a temporary Window to avoid the Copy problem
'if there is a List or Table in one of the sheets and
'if the sheets are grouped
With Sourcewb
Set TheActiveWindow = ActiveWindow
Set TempWindow = .NewWindow
.Sheets(Array("Report", "Charts")).Copy
End With


'Close temporary Window
TempWindow.Close


Set Destwb = ActiveWorkbook


'Determine the Excel version and file extension/format
With Destwb
If Val(Application.Version) < 12 Then
'You use Excel 97-2003
FileExtStr = ".xls": FileFormatNum = -4143
Else
'You use Excel 2007-2016
FileExtStr = ".xlsm": FileFormatNum = 52
End If
End With


' 'Change all cells in the worksheets to values if you want
' For Each sh In Destwb.Worksheets
' sh.Select
' With sh.UsedRange
' .Cells.Copy
' .Cells.PasteSpecial xlPasteValues
' .Cells(1).Select
' End With
' Application.CutCopyMode = False
' Destwb.Worksheets(1).Select
' Next sh


'Save the new workbook/Mail it/Delete it
TempFilePath = Environ$("temp") & ""
TempFileName = "Plant Efficiency Report -- " & Format(Now, "mm-dd-yyyy")


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


With Destwb
.SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
On Error Resume Next
With OutMail
.to = ""
.CC = ""
.BCC = ""
.Subject = "Labor Variance Report"
.Body = "Here is the Plant Efficiency Report for your Review"
.Attachments.Add Destwb.FullName
'You can add other files also like this
'.Attachments.Add ("C:\test.txt")
.Send 'or use .Display
End With
On Error GoTo 0
.Close savechanges:=False
End With


'Delete the file you have send
Kill TempFilePath & TempFileName & FileExtStr


Set OutMail = Nothing
Set OutApp = Nothing


With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
 
Last edited:

Excel Facts

What did Pito Salas invent?
Pito Salas, working for Lotus, popularized what would become to be pivot tables. It was released as Lotus Improv in 1989.
Is it a chart you want to send as an image?
 
Upvote 0
What you could do is use the Export method of the charts to save them as images and then add the saved images to a sheet in the workbook you are emailing.

Obviously you would lose any of the functionality of the charts and the images might not be too great but it might be worth a shot.
 
Upvote 0
What you could do is use the Export method of the charts to save them as images and then add the saved images to a sheet in the workbook you are emailing.

Obviously you would lose any of the functionality of the charts and the images might not be too great but it might be worth a shot.
I am not concerned with the chart functionality, but Im not sure exporting them is a good option, it does some really quirky things to the chart formatting, I may just have to continue doing this step manually. Thank you for your help!
 
Upvote 0
Could you not export the data for the charts as well, perhaps in a hidden sheet?
 
Upvote 0
That is what I wanted to do originally, and it works great, but I cant figure out how to hide that one worksheet during the process

I was able to do it with the code below, thank you so much for your help!

Set TheActiveWindow = ActiveWindow
Set TempWindow = .NewWindow
.Sheets(Array("Report", "Charts", "ChartTable")).Copy
Worksheets("ChartTable").Visible = False
 
Upvote 0

Forum statistics

Threads
1,223,886
Messages
6,175,191
Members
452,616
Latest member
intern444

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top