我有initially answered問題How to only paste visible cells in an email bodyExcel的VBA:發送Outlook電子郵件不包括粘貼區域
我測試併發布(見下文),不包括髮送電子郵件的代碼。在OP向他的問題添加之後,我添加了.Send
部分,但是我獲得的行爲非常奇怪。 如果我在發送之前放置一個斷點,並執行Sub
,則會使用正確的信息(包括粘貼的Excel Range
)創建一封電子郵件。然後我繼續執行,並正確發送電子郵件。但是,如果我一次運行整個Sub
,並且沒有斷點,則電子郵件在發送時不會粘貼Excel Range
。
這是什麼原因,以及解決方案是什麼?
我試過評論/取消註釋最後兩行(Set ... = Nothing
),但它沒有幫助。
相關問題:
Copy range of cells from Excel to body of email in Outlook
Pasting formatted Excel range into Outlook message
代碼的參考(基於由Ron日布魯因典型的代碼,請參閱this和this):
Sub SendEmail()
Dim OutlookApp As Object
'Dim OutlookApp As Outlook.Application
Dim MItem As Object
'Dim MItem As Outlook.MailItem
'Create Outlook object
Set OutlookApp = CreateObject("Outlook.Application")
'Set OutlookApp = New Outlook.Application
Dim Sendrng As Range
Set Sendrng = Worksheets("Test").Range("A1").SpecialCells(xlCellTypeVisible)
Sendrng.Copy
'Create Mail Item
Set MItem = OutlookApp.CreateItem(0)
'Set MItem = OutlookApp.CreateItem(olMailItem)
With MItem
.To = "[email protected]"
.To = "[email protected]"
.Subject = "Test"
.CC = ""
.BCC = ""
'.Body = "a"
.Display
End With
SendKeys "^({v})", True
With MItem
.Send
End With
'Set OutlookApp = Nothing
'Set MItem = Nothing
End Sub
+1:我第二個使用完全相同的代碼粘貼你想進入人體'Range'。這也是我使用的。唯一的缺點是'Body'被轉換爲'HTMLBody',這限制了你想要做的一些事情(並且爲我默認的郵件字體改爲Times New Roman,icky但很容易解決)。 – Manhattan
@ BK201:真:)人們總是可以使用'SendMessage' API;) –
每天都有新的東西可以學習。將閱讀這個'SendMessage' API。看起來很有希望,它甚至可以解決我將圖表和圖形發送到郵件正文時遇到的問題。 ;) – Manhattan