2017-03-29 162 views
-2

我有下面的代碼,通過從我的Excel工作表中獲取數據發送Outlook電子郵件。VBA宏觀outlook生成電子郵件

只要點擊按鈕以允許訪問我的電子郵件,就會自動發送此電子郵件。

我想改變這個,以便生成電子郵件,並且在發送之前我必須在每封電子郵件上實際按下發送。

是否有人可以幫助,我怎麼需要改變的代碼要做到這一點,下面的代碼,

Sub Mail_Selection_Range_Outlook_Body() 
'For Tips see: http://www.rondebruin.nl/win/winmail/Outlook/tips.htm 
'Don't forget to copy the function RangetoHTML in the module. 
'Working in Excel 2000-2016 
    Dim rng As Range 
    Dim OutApp As Object 
    Dim OutMail As Object 
    Dim cell As Range 
    Dim StrBody As String 

    Set rng = Nothing 
    On Error Resume Next 
    'Only the visible cells in the selection 
    Set rng = Selection.SpecialCells(xlCellTypeVisible) 
    'You can also use a fixed range if you want 
    Set rng = Range("ZCCollar").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 


    StrBody = Sheets("MailInfo").Range("E1").Value & "<br><br>" & _ 
       Sheets("MailInfo").Range("E2").Value & "<br>" & _ 
       Sheets("MailInfo").Range("E3").Value 

    Set OutApp = CreateObject("Outlook.Application") 

On Error Resume Next 
For Each cell In Sheets("MailInfo").Columns("B").Cells.SpecialCells(xlCellTypeConstants) 
    If cell.Value Like "?*@?*.?*" And _ 
     LCase(Cells(cell.Row, "C").Value) = "yes" Then 

     Set OutMail = OutApp.CreateItem(0) 
     On Error Resume Next 
     With OutMail 
      .To = cell.Value 
      .Subject = "Index Option RFQ" 


      .HTMLBody = StrBody & RangetoHTML(rng) & "<br>" & "Thanks" 



      'You can add files also like this 
      '.Attachments.Add ("C:\test.txt") 
      .Send 'Or use Display 
     End With 
     On Error GoTo 0 
     Set OutMail = Nothing 
    End If 
Next cell 








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

    Set OutMail = Nothing 
    Set OutApp = Nothing 
End Sub 


Function RangetoHTML(rng As Range) 
' Changed by Ron de Bruin 28-Oct-2006 
' Working in Office 2000-2016 
    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 
+2

'。發送「或使用Display' ??? – 0m3r

+2

@ 0m3r:現代程序員的態度:簡單地使用c&p代碼,嘗試它並在「它有效」的情況下得到滿足,但絕不會花費一些時間來試圖理解它是如何工作的。 –

+0

感謝您的幫助,對不起! – gekko2670

回答

-1

變化

.Send

.Display

裏面的With OutMail塊。

這樣的電子郵件,將會產生顯示,但不發送,等待着你去點擊發送

+0

感謝您的幫助 – gekko2670

相關問題