內容目錄

前言:

上次講解過如何用VBA控制Word,希望大家都能實際運用,節省時間。

我相信很多朋友對於如何提升生產力,優化時間管理的效益有很大需求,那麼我們今天再來講解一下VBA對於Outlook的操作。

如果有讀過《自學Excel VBA系列-如何用VBA控制WORD?》,對於如何控制外部程式應該有一定的經驗,解說部分我們就相對簡短一點。

同樣,開始之前一定要在VBA裡面的工具–>設定引用項目–>勾選Microsoft Outlook 14.0 Object Library。

自學Excel VBA系列-如何用VBA控制OutLook

顯示電子郵件視窗:

Sub CreateMail()

‘outlook應用程式儲存在物件變數中
Dim olApp As Outlook.Application
Set olApp = New Outlook.Application

‘建立MailItem物件
Dim olMail As Outlook.MailItem
Set olMail = olApp.CreateItem(olMailItem)

‘預覽郵件
olMail.Display

MsgBox “已打開 OUTLOOK”

‘刪除物件變數參照
Set olMail = Nothing
Set olApp = Nothing

End Sub

這個程式碼主要是執行以下程序:

  1. 宣告olApp為Outlook.Application型的物件變數
  2. 使用new生成Outlook的物件,並儲存在olApp內
  3. 打開一封新郵件
  4. 彈出Msgbox

聽起來好像比Word要複雜一點,沒關係,我們一步一步慢慢來,先嘗試執行程式碼,應該可以打開一封新郵件。

操作Outlook的概念

自學Excel VBA系列-如何用VBA控制OutLook

之後若要操作Outlook應用程式,只要寫成 (變數名稱.屬性) 及 (變數名稱.方法)就可以了。

備註:至於這一句olApp.CreateItem(olMailItem),括號裡面的東西有點疑問,不放東西會有錯誤,隨便改個名字也能通過,後面也不會再用到這個變數。

傳送電子郵件練習:

Sub SendMail()

‘outlook應用程式儲存在物件變數中
Dim olApp As Outlook.Application
Set olApp = New Outlook.Application

‘建立MailItem物件
Dim olMail As Outlook.MailItem
Set olMail = olApp.CreateItem(olMailItem)

‘電子郵件資料
With olMail

   '收件者
   .To = "abc@excel.com"
   '主旨
   .Subject = "你好"
   '郵件內容
   .Body = "郵件內容"
   '郵件格式
   .BodyFormat = olFormatPlain '文字格式

End With

‘加入附件
olMail.Attachments.Add ThisWorkbook.Path & “\pic1.png” ‘要記得建立png檔。否則,直接刪除這一行

‘傳送電子郵件
olMail.Save ‘儲存草稿
olMail.Display ‘顯示預覽
olMail.Send ‘傳送

MsgBox “已傳送郵件”

‘刪除物件變數參照
Set olMail = Nothing
Set olApp = Nothing

End Sub

至此,剛才介紹過的屬性及方法已全部操作過。

另外,如果想要加入副本,就是olMail.Cc;設定密件副本,就是olMail.Bcc。

傳送多封郵件練習:

首先在工作表中建立清單以及郵件內容資料,

Sub SendMultiMail()

‘outlook應用程式儲存在物件變數中
Dim olApp As Outlook.Application
Set olApp = New Outlook.Application

‘取得清單的最後一列
Dim maxRow As Long
maxRow = Worksheets(“清單”).Cells(Rows.Count, 1).End(xlUp).Row
‘MsgBox maxRow ‘測試用

‘回圈執行直至最後一列
Dim i As Long
For i = 2 To maxRow

‘建立MailItem物件
Dim olMail As Outlook.MailItem
Set olMail = olApp.CreateItem(olMailItem)

‘電子郵件資料
With olMail

  '收件者
  .To = Worksheets("清單").Cells(i, 3).Value
  '主旨
  .Subject = Worksheets("郵件內容").Range("B1").Value
  '郵件內容
  Dim str As String
  str = Worksheets("郵件內容").Range("B2").Value
  str = Replace(str, "[公司名稱]", Worksheets("清單").Cells(i, 1).Value)
  str = Replace(str, "[姓名]", Worksheets("清單").Cells(i, 2).Value)
  .Body = str

  '郵件格式
  .BodyFormat = olFormatPlain '文字格式

End With

‘加入附件
olMail.Attachments.Add ThisWorkbook.Path & “\pic1.png”

‘傳送電子郵件
olMail.Save ‘儲存草稿
‘olMail.Display ‘顯示預覽
‘olMail.Send ‘傳送

Set olMail = Nothing

Next i

‘刪除物件變數參照
Set olApp = Nothing

End Sub

為了便於測試,預覽和傳送都變成備註。實際操作下來,其實也沒有太複雜,海量傳送郵件的感覺還是很不錯的,有任何問題歡迎留言給我。