View Single Post
  #1   Report Post  
Posted to microsoft.public.excel.programming
Brice Brice is offline
external usenet poster
 
Posts: 21
Default Send mail from excel - Copy/paste unformatted values and error mes

The below code (which creates email from a range/selection in excel)
currently works on my computer but I would like my colleagues to use it too.
When they try on their computers they receive an script error message. The
debugger identifies "Environ$" as problem in VBA ascript. How do I fix this?

Also, I would like to copy & paste unformatted values into the email. Is
this possible? Please provide code if possible.

I would really appreciate your help! Thanks, Brice

Code:
---------------------------------------------
Function RangetoHTML(rng As Range)

Dim fso As Object

Dim ts As Object

Dim TempFile As String

Dim TempWB As Workbook



TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") &
".htm"



'Copy the range and create a new workbook to past the data in

rng.Copy

Set TempWB = Workbooks.Add(1)

With TempWB.Sheets(1)

.Cells(1).PasteSpecial Paste:=8

.Cells(1).PasteSpecial xlPasteValues, , False, False

.Cells(1).PasteSpecial xlPasteFormats, , False, False

.Cells(1).Select

Application.CutCopyMode = False

On Error Resume Next

.DrawingObjects.Visible = True

.DrawingObjects.Delete

On Error GoTo 0

End With



'Publish the sheet to a htm file

With TempWB.PublishObjects.Add( _

SourceType:=xlSourceRange, _

Filename:=TempFile, _

Sheet:=TempWB.Sheets(1).Name, _

Source:=TempWB.Sheets(1).UsedRange.Address, _

HtmlType:=xlHtmlStatic)

.Publish (True)

End With

'Read all data from the htm file into RangetoHTML

Set fso = CreateObject("Scripting.FileSystemObject")

Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)

RangetoHTML = ts.ReadAll

ts.Close

RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _

"align=left x:publishsource=")



'Close TempWB

TempWB.Close savechanges:=False



'Delete the htm file we used in this function

Kill TempFile



Set ts = Nothing

Set fso = Nothing

Set TempWB = Nothing

End Function

-----------------------------------------------------------
Sub Mail_Selection_Range_Outlook_Body_Recall()

' Don't forget to copy the function RangetoHTML in the module.

Dim rng As Range

Dim OutApp As Object

Dim OutMail As Object

Set rng = Nothing

On Error Resume Next

'You can also use a range if you want

Set rng =
Sheets("Recall").Range("$N$11:$O$20").SpecialCells (xlCellTypeVisible)

On Error GoTo 0

If rng Is Nothing Then

MsgBox "The selection is not a range or the sheet is protected" & _

vbNewLine & "please correct and try again.", vbOKOnly

Exit Sub

End If

With Application

.EnableEvents = False

.ScreenUpdating = False

End With

Set OutApp = CreateObject("Outlook.Application")

OutApp.Session.Logon

Set OutMail = OutApp.CreateItem(0)

On Error Resume Next

With OutMail

.To = Sheets("Recall").Range("O9").Value

.CC = "

.BCC = ""

.Subject = "Wire Receipt"

.HTMLBody = RangetoHTML(rng)

.Display 'or use .Send as replacement to auto-send email without review

End With

On Error GoTo 0

With Application

.EnableEvents = True

.ScreenUpdating = True

End With

Set OutMail = Nothing

Set OutApp = Nothing

End Sub