發布時間:2024-01-24閱讀(15)
【分享成果,隨喜正能量】堅持,就是在堅持不下去的時候再堅持。做一件事并不難,難的是在于堅持;堅持一下也不難,難的是堅持到底.堅持很難,但別無選擇。堅持有堅持的痛,但也有它的魅力。那種美,倔強又絕然。你成功了,你的堅持就叫執著。你失敗了,你的堅持就叫固執。但不管什么結果,繼續勇敢地走下去吧,你的堅持還有一個名字,叫無悔。
《VBA信息獲取與處理》教程是我推出第六套教程,目前已經是第一版修訂了。這套教程定位于最高級,是學完初級,中級后的教程。這部教程給大家講解的內容有:跨應用程序信息獲得、隨機信息的利用、電子郵件的發送、VBA互聯網數據抓取、VBA延時操作,剪貼板應用、Split函數擴展、工作表信息與其他應用交互,FSO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定制工作表信息函數等等內容。程序文件通過32位和64位兩種OFFICE系統測試。是非常抽象的,更具研究的價值。
教程共兩冊,八十四講。今日的內容是專題五“利用VBA發送電子郵件”的第2講:VBA發送工作表指定內容的電子郵件

在上一講中我們講了發送帶附件的電子郵件,我們這講的內容是講解如何發送工作表的指定內容給各個郵箱,上一講雖然也講了發送工作表指定區域的選擇,但這個區域要求是連續的,對于非連續的區域該如何處理呢?這講我將給出一個可以利用的方案。如下圖:

上述表格是“VBA職業教育網絡公社”職工的工資名單,要把這些名單單獨的發送給后面的郵箱地址,這些地址在示例中我給出的是一個值,大家在實際利用時可以設置。如何做到這項工作呢?
1 郵件發送工作表不連續區域內容的思路分析為了實現我們剛才提到的目的,我們先把整個工資表放在一個工作表內,然后建立一個新的工作表,如下:

然后我們將工資表內的內容按照需要拷貝到這個單獨的工作表內,實現郵件的發送即可。代碼同樣可以借鑒上一講的代碼,這也是我的積木編程思想。
2 郵件發送工作表不連續區域內容的代碼實現為了完成上述的思路,我們可以利用下面的代碼,大家要注意本專題的代碼請參考:“005工作表.xlsm”程序文件,由于這部教程是VBA的提高篇,在講解的時候我側重的是思路分析,具體的實現大家要仔細的理解。
我們看下面的代碼:
Sub myNZA()
Dim myArray As Variant
Sheets("Sheet3").Select
關閉屏幕刷新及事件的反復觸發
Application.ScreenUpdating = False
Application.EnableEvents = False
將工資表預讀到數組
myArray = Sheets("工資表").Range("a1").CurrentRegion
For i = 3 To UBound(myArray)
將數組的值拆分后寫到工作表中
Range("a3:i3") = Application.Index(myArray, i)
選擇要發送給職工的工資條內容
Range("A1:H3").Select
放出標題注釋
ActiveWorkbook.EnvelopeVisible = True
郵件設置
With ActiveSheet.MailEnvelope
strText = myArray(i, 1) & "您好:" & vbCrLf & "以下是您" & _
myArray(i, 2) & "月份工資明細,請查收!"
設置添加的可選介紹字段文本到電子郵件正文,標題設置注釋
.Introduction = strText
With .Item
.To = myArray(i, 9)
.Subject = myArray(i, 2) & "月份工資明細"
.Send
End With
End With
Next
ActiveWorkbook.EnvelopeVisible = False
Application.ScreenUpdating = True
Application.EnableEvents = True
MsgBox "OK!"
End Sub
代碼的截圖:


1) myArray = Sheets("工資表").Range("a1").CurrentRegion 這個語句是實現將工資表預存到數組中,從而實現更快的讀取數據的效果。
2)Range("a3:i3") = Application.Index(myArray, i) 這行語句實現將數組中的值按行讀到發送郵件的工作表中,注意上面語句的寫法Index(myArray, i),不清楚的可以參考我的第三套教程《VBA數組與字典解決方案》中的知識點講解
3)Range("A1:H3").Select 這行語句是郵件發送內容的設定,將在郵件的正文部分體現。
4).Subject = myArray(i, 2) & "月份工資明細" 這行語句是郵件題目的內容。
5)With ActiveSheet.MailEnvelope
strText = myArray(i, 1) & "您好:" & vbCrLf & "以下是您" & _
myArray(i, 2) & "月份工資明細,請查收!"
設置添加的可選介紹字段文本到電子郵件正文,標題設置注釋
.Introduction = strText
With .Item
.To = myArray(i, 9)
.Subject = myArray(i, 2) & "月份工資明細"
.Send
End With
End With
上面的這段代碼完成了郵件的設置及發送。
6)For i = 3 To UBound(myArray)
……..
Next
以上語句是讓for next的循環體部分多次循環以達到給每個人發送郵件的目的。
對于其他的語句的不不再詳細的講解了,在上一講有涉及。
4 VBA代碼實現效果最后我們看看代碼的實現效果,點擊:

最后我們看工作表界面和郵件的接收界面:
工作表界面:

郵件接收界面:

以上完全達到了我們最初的要求,但要注意在發送郵件的時候OUTLOOK要處于打開的狀態。
本節知識點回向:如何實現將工作表不連續區域內容的發送電子郵件?如何實現多個電子郵件的自動發送?
本專題參考程序文件:005工作表.XLSM

我20多年的VBA實踐經驗,全部濃縮在下面的各個教程中,教程學習順序:

歡迎分享轉載→http://m.avcorse.com/read-224422.html
Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖